GNU/Linux >> Linux Esercitazione >  >> Linux

determinare la shell nello script durante il runtime

Forse non è quello che stai chiedendo, ma questo dovrebbe funzionare in una certa misura per identificare l'interprete che lo sta attualmente interpretando per qualche mi piace

  1. Guscio Thompson (osh ),
  2. Bourne shell,
  3. Bourne-again shell (bash ),
  4. Guscio Korn (ksh88 , ksh93 , pdksh , mksh ),
  5. zsh ,
  6. Shell ordinaria conforme alle policy (posh ),
  7. Ancora un'altra shell (yash ),
  8. rc guscio,
  9. akanga guscio,
  10. es shell,
  11. wish Interprete TCL,
  12. tclsh Interprete TCL,
  13. expect Interprete TCL,
  14. Perl,
  15. Pitone,
  16. Rubino,
  17. PHP,
  18. JavaScript (nodejs, shell SpiderMonkey e JSPL almeno)
  19. MS/Vino 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 } *///'''

Ho postato la versione iniziale di what_interpreter script intorno al 2004 su Usenet. Sven Mascheck ha uno script (probabilmente più utile per te) chiamato whatshell che si concentra sull'identificazione di shell simili a Bourne. Puoi anche trovare una versione unita dei nostri due script lì.


Su Linux puoi usare /proc/PID/exe .

Esempio:

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

Questo è quello che uso nel mio .profile per verificare la presenza di varie shell sui sistemi su cui lavoro. Non fa sottili distinzioni tra ksh88 e ksh93, ma non mi ha mai deluso.

Nota che non richiede un singolo fork o pipe.

# 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. Determinare la shell nello script durante il runtime?

  2. Determinazione del percorso per lo script della shell di origine?

  3. Come gestire gli interruttori in uno script di shell?

  4. Nascondere la password negli script della shell?

  5. Processi in una sessione in una shell interattiva vs in uno script?

Come utilizzare le variabili negli script della shell

Come creare script di shell

Come eseguire un comando in uno script della shell?

Esecuzione di script di shell in parallelo

Directory corrente dello script Shell?

Eseguire uno script di shell come utente diverso