paulheinz schrieb:
Gegeben sind SHELLs mit den Namen exe_a.sh, exe_b.sh, exe_c.sh … exe_z.sh.
Shells oder Shellscripte (Shell ist kein Akronym und bedarf daher keiner GROSSSCHREIBUNG)?
Ferner existiert die Datei info.txt, in der nur ein SHELL-Name stehen wird (z.B.: exe_x.sh).
Wenn Du info.txt in exe.sh umbenennst und ausführbar machst, könntest Du es direkt aufrufen.
Stünde nicht nur der Name der Shell drin, sondern
{{{#!code bash
exe_s.sh $@
}}}
Könntest Du auch noch Argumente übergeben.
Ich suche eine Möglichkeit – vielleicht mit GREP? – mit dem Extrakt der info.txt ein SHELL names suk.sh zu kommandieren:
Ein Shellscript oder eine Shell?
#!/bin/bash
if grep -q -E 'exe_a.sh' /home/usr/Downloads/info.txt ; then
bash /usr/local/bin/[SHELL-Name]
fi ;
exit 0
Weder die Verwendung von -E, noch von Anführungsstrichen um den Shellnamen erschließen sich. Das exit 0
ist auch überflüssig.
Wie bekomme ich den in info.txt aktuell stehende SHELL-Name in die Zeile automatisch von suk.sh hinein?
Suk.sh taucht ja im Script gar nicht auf.
Ah - der 6-Zeiler ist suk.sh?
| #!/bin/bash
exesh=$(cat /home/usr/Downloads/info.txt | egrep -o exe_..sh)
test -x $exesh && $exesh
|
Wenn die Scripte in /usr/local/bin liegen, ist das üblicherweise im Pfad und kann ohne vollständigen Pfad aufgerufen werden.
Das test -x prüft, ob der Aufrufer die Datei ausführen kann.
Wenn das Script abgearbeitet ist, wird es automatisch verlassen, kein exit nötig, und exit 0 würde nur mögliche Fehler verdecken - das ist selten sinnvoll aber nicht selten schädlich. Will man trotz eines Fehlers weiterarbeiten, sollte das der entscheiden, der das Skript benutzt, nicht das Skript selbst.
Pedanten würden den zweiten Punkt in exe_..sh maskieren, weil der Punkt für ein beliebiges Zeichen steht, aber da der Punkt selbst ein beliebiges Zeichen ist, matcht er natürlich. Wenn Du auch exe_fush in /usr/local/bin hast, wärst Du damit aber auf der sicheren Seite.
Steht in info.txt nur eine Zeile mit dem Shellnamen reicht auch
statt des Grepbefehls.
Die exe_x.sh - Scripte sollten natürlich einen Shebang enthalten - sonst rufst Du eben
| test -x $exesh && bash /usr/local/bin/$exesh
|
auf.