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
- Coque Thompson (
osh
), - Coquille de Bourne,
- Bourne-again shell (
bash
), - Coque Korn (
ksh88
,ksh93
,pdksh
,mksh
), zsh
,- Shell ordinaire conforme à la politique (
posh
), - Encore un autre shell (
yash
), rc
coquille,akanga
coquille,- c'est une coque,
wish
Interprète TCL,tclsh
Interprète TCL,expect
Interprète TCL,- Perl,
- Python,
- Rubis,
- PHP,
- JavaScript (nodejs, shell SpiderMonkey et JSPL au moins)
- 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