GNU/Linux >> Belajar Linux >  >> Linux

tentukan shell dalam skrip selama runtime

Mungkin bukan yang Anda minta, tetapi ini harus bekerja sampai batas tertentu untuk mengidentifikasi juru bahasa yang saat ini menafsirkannya untuk beberapa hal seperti

  1. Thompson shell (osh ),
  2. Cangkang Bourne,
  3. Bourne-again shell (bash ),
  4. Cangkang Korn (ksh88 , ksh93 , pdksh , mksh ),
  5. zsh ,
  6. Cangkang biasa yang mematuhi kebijakan (posh ),
  7. Kerang Lain (yash ),
  8. rc cangkang,
  9. akanga cangkang,
  10. cangkangnya,
  11. wish juru bahasa TCL,
  12. tclsh juru bahasa TCL,
  13. expect juru bahasa TCL,
  14. Perl,
  15. Python,
  16. Ruby,
  17. PHP,
  18. JavaScript (setidaknya nodejs, SpiderMonkey shell, dan JSPL)
  19. MS/Wine cmd.exe , command.com (MSDOS, FreeDOS...).
'echo' +"'[{<?php echo chr(13)?>php <?php echo PHP_VERSION.chr(10);exit;?>}\
@GOTO DOS [exit[set 1 [[set 2 package] names];set 3 Tcl\ [info patchlevel];\
if {[lsearch -exact $1 Expect]>=0} {puts expect\ [$2 require Expect]\ ($3)} \
elseif {[lsearch -exact $1 Tk]>=0} {puts wish\ ($3,\ Tk\ [$2 require Tk])} \
else {puts $3}]]]' >/dev/null ' {\">/dev/null \
">"/dev/null" +"\'";q="#{",1//2,"}";a=+1;q='''=.q,';q=%{\"
'echo' /*>/dev/null
echo ">/dev/null;status=0;@ {status=1};*=(" '$' ");~ $status 1&&{e='"\
"';eval catch $2 ^'&version {eval ''echo <='^ $2 ^'&version''}';exit};e='"\
"';if (eval '{let ''a^~a''} >[2] /dev/null'){e='"\
"';exec echo akanga};eval exec echo rc $2 ^ version;\" > /dev/null
: #;echo possibly pre-Bourne UNIX V1-6 shell;exit
if (! $?version) set version=csh;exec echo $version
:DOS
@CLS
@IF NOT "%DOSEMU_VERSION%"=="" ECHO DOSEMU %DOSEMU_VERSION%
@ECHO %OS% %COMSPEC%
@VER
@GOTO FIN
", unless eval 'printf "perl %vd\n",$^V;exit;'> "/dev/null";eval ': "\'';
=S"';f=false e=exec\ echo n=/dev/null v=SH_VERSION;`(eval "f() { echo :
};f")2>$n` $f||$e Bourne-like shell without function
case `(: ${_z_?1}) 2>&1` in 1) $e ash/BSD sh;;esac;t(){
eval "\${$1$v+:} $f &&exec echo ${2}sh \$$1$v";};t BA ba;t Z z;t PO po;t YA ya
case `(typeset -Z2 b=0;$e $b)2>$n` in 00) (eval ':${.}')2>$n&&eval '
$e ksh93 ${.sh.version}';t K pdk;$e ksh88;;esac;case `(eval '$e ${f#*s}$($e 1
)$((1+1))')2>$n` in e12)$e POSIX shell;;esac;$e Bourne-like shell;: }
print "ruby ",RUBY_VERSION,"\n";exit;' ''';import sys
print("python "+sys.version);z='''*/;
s="";j="JavaScript";if(typeof process=="object"){p=console.log;p(process.title
,process.version)}else{p=print;p((f="function")==(t=typeof version)?"string"==
typeof(v=version())?v:(typeof build!=f?"":s= "SpiderMonkey ")+j+" "+v:(t==
"undefined"?j+"?":version)+"\n");if(s)build()}/*
:FIN } *///'''

Saya memposting versi awal dari which_interpreter skrip itu sekitar tahun 2004 di usenet. Sven Mascheck memiliki skrip (mungkin lebih berguna bagi Anda) yang disebut whatshell yang berfokus untuk mengidentifikasi cangkang mirip Bourne. Anda juga dapat menemukan versi gabungan dari dua skrip kami di sana.


Di linux Anda dapat menggunakan /proc/PID/exe .

Contoh:

# readlink /proc/$$/exe
/bin/zsh

Inilah yang saya gunakan di .profile saya untuk memeriksa berbagai shell pada sistem tempat saya bekerja. Itu tidak membuat perbedaan yang jelas antara ksh88 dan ksh93, tetapi tidak pernah mengecewakan saya.

Perhatikan bahwa ini tidak memerlukan satu garpu atau pipa.

# Determine what (Bourne compatible) shell we are running under. Put the result
# in $PROFILE_SHELL (not $SHELL) so further code can depend on the shell type.

if test -n "$ZSH_VERSION"; then
  PROFILE_SHELL=zsh
elif test -n "$BASH_VERSION"; then
  PROFILE_SHELL=bash
elif test -n "$KSH_VERSION"; then
  PROFILE_SHELL=ksh
elif test -n "$FCEDIT"; then
  PROFILE_SHELL=ksh
elif test -n "$PS3"; then
  PROFILE_SHELL=unknown
else
  PROFILE_SHELL=sh
fi

Linux
  1. Menentukan Jalur Ke Skrip Shell Bersumber?

  2. Bagaimana Menangani Switch Dalam Script Shell?

  3. Arti dari $? Dalam Skrip Shell?

  1. Menjalankan skrip shell secara paralel

  2. Skrip transliterasi untuk shell linux

  3. Apakah skrip shell adalah bahasa pemrograman?

  1. Tentukan Shell In Script Selama Runtime?

  2. Waktu Habis Dalam Skrip Shell?

  3. Perilaku Tak Terduga Dari Skrip Shell?