GNU/Linux >> Tutoriels Linux >  >> Linux

déterminer le shell dans le script pendant l'exécution

Peut-être pas ce que vous demandez, mais cela devrait fonctionner dans une certaine mesure pour identifier l'interprète qui l'interprète actuellement pour quelques-uns comme

  1. Coque Thompson (osh ),
  2. Coquille de Bourne,
  3. Bourne-again shell (bash ),
  4. Coque Korn (ksh88 , ksh93 , pdksh , mksh ),
  5. zsh ,
  6. Shell ordinaire conforme à la politique (posh ),
  7. Encore un autre shell (yash ),
  8. rc coquille,
  9. akanga coquille,
  10. c'est une coque,
  11. wish Interprète TCL,
  12. tclsh Interprète TCL,
  13. expect Interprète TCL,
  14. Perl,
  15. Python,
  16. Rubis,
  17. PHP,
  18. JavaScript (nodejs, shell SpiderMonkey et JSPL au moins)
  19. MS/Vin 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 } *///'''

J'ai posté la version initiale de ce script which_interpreter script vers 2004 sur Usenet. Sven Mascheck a un script (probablement plus utile pour vous) appelé whatshell qui se concentre sur l'identification des shells de type Bourne. Vous pouvez également y trouver une version fusionnée de nos deux scripts.


Sous Linux, vous pouvez utiliser /proc/PID/exe .

Exemple :

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

C'est ce que j'utilise dans mon .profile pour vérifier les différents shells sur les systèmes sur lesquels je travaille. Il ne fait pas de distinction fine entre ksh88 et ksh93, mais il ne m'a jamais échoué.

Notez qu'il ne nécessite pas une seule fourche ou un seul tuyau.

# 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. Expiration du délai dans un script shell ?

  2. Comportement inattendu d'un script shell ?

  3. Processus dans une session dans un shell interactif Vs dans un script ?

  4. La signification de $ ? Dans un script shell ?

  5. Exécuter un script shell en parallèle

Comment utiliser des variables dans les scripts Shell

Comment créer des scripts shell

Comment exécuter une commande dans un script shell ?

Script de translittération pour le shell Linux

Le script shell est-il un langage de programmation ?

Exécuter un script shell en tant qu'utilisateur différent