GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Shell zur Laufzeit im Skript ermitteln

Vielleicht nicht das, wonach Sie fragen, aber das sollte bis zu einem gewissen Grad funktionieren, um den Interpreter zu identifizieren, der es gerade für ein paar wie

interpretiert
  1. Thompson-Shell (osh ),
  2. Bourne-Shell,
  3. Bourne-again-Shell (bash ),
  4. Kornschale (ksh88 , ksh93 , pdksh , mksh ),
  5. zsh ,
  6. Richtlinienkonforme gewöhnliche Shell (posh ),
  7. Noch eine Shell (yash ),
  8. rc Schale,
  9. akanga Schale,
  10. es Shell,
  11. wish TCL-Interpreter,
  12. tclsh TCL-Interpreter,
  13. expect TCL-Interpreter,
  14. Perl,
  15. Python,
  16. Rubin,
  17. PHP,
  18. JavaScript (mindestens nodejs, SpiderMonkey-Shell und JSPL)
  19. MS/Wein 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 } *///'''

Ich habe die ursprüngliche Version dieses which_interpreter Skripts gepostet ca. 2004 im Usenet. Sven Mascheck hat ein (für Sie wahrscheinlich nützlicheres) Skript namens whatshell, das sich auf die Identifizierung von Bourne-ähnlichen Shells konzentriert. Dort finden Sie auch eine zusammengeführte Version unserer beiden Skripte.


Unter Linux können Sie /proc/PID/exe verwenden .

Beispiel:

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

Dies ist, was ich in meinem .profile verwende, um auf den Systemen, an denen ich arbeite, nach verschiedenen Shells zu suchen. Es macht keine feinen Unterschiede zwischen ksh88 und ksh93, aber es hat mich nie im Stich gelassen.

Beachten Sie, dass keine einzige Gabel oder Leitung erforderlich ist.

# 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. Zeitüberschreitung in einem Shell-Skript?

  2. Unerwartetes Verhalten eines Shell-Skripts?

  3. Wie erstelle ich eine temporäre Datei im Shell-Skript?

  4. Passwort in Shell-Skripten verstecken?

  5. Prozesse in einer Sitzung in einer interaktiven Shell oder in einem Skript?

So verwenden Sie Variablen in Shell-Skripten

So erstellen Sie Shell-Skripte

Wie behandelt man Schalter in einem Shell-Skript?

Wie führe ich einen Befehl in einem Shell-Skript aus?

Transliterationsskript für die Linux-Shell

Kann eine .sh-Datei Malware sein?