GNU/Linux >> Tutoriales Linux >  >> Linux

determinar shell en el script durante el tiempo de ejecución

Tal vez no sea lo que estás pidiendo, pero esto debería funcionar hasta cierto punto para identificar al intérprete que lo está interpretando actualmente durante unos pocos me gusta

  1. Concha de Thompson (osh ),
  2. Concha de Bourne,
  3. Caparazón Bourne-again (bash ),
  4. Concha de Korn (ksh88 , ksh93 , pdksh , mksh ),
  5. zsh ,
  6. Shell ordinario que cumple con las políticas (posh ),
  7. Otro caparazón más (yash ),
  8. rc concha,
  9. akanga concha,
  10. es concha,
  11. wish intérprete de TCL,
  12. tclsh intérprete de TCL,
  13. expect intérprete de TCL,
  14. Perl,
  15. Pitón,
  16. Rubí,
  17. PHP,
  18. JavaScript (nodejs, shell SpiderMonkey y JSPL al menos)
  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 } *///'''

Publiqué la versión inicial de which_interpreter script alrededor de 2004 en usenet. Sven Mascheck tiene un script (probablemente más útil para usted) llamado whatshell que se enfoca en identificar shells tipo Bourne. También puede encontrar una versión combinada de nuestros dos scripts allí.


En Linux puedes usar /proc/PID/exe .

Ejemplo:

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

Esto es lo que uso en mi .profile para verificar varios shells en los sistemas en los que trabajo. No hace distinciones finas entre ksh88 y ksh93, pero nunca me ha fallado.

Tenga en cuenta que no requiere una sola bifurcación o tubería.

# 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. ¿Determinar Shell en el script durante el tiempo de ejecución?

  2. ¿Tiempo de espera agotado en un script de Shell?

  3. ¿Determinar la ruta al script de Shell de origen?

  4. ¿Cómo manejar los interruptores en un script de Shell?

  5. ¿Procesos en una sesión en un shell interactivo versus en un script?

Cómo usar variables en secuencias de comandos de Shell

Cómo crear scripts de shell

¿Cómo ejecutar un comando en un script de Shell?

Shell script directorio actual?

Script de transliteración para shell de linux

Ejecute un script de shell como un usuario diferente