Korrigieren Sie mich, wenn ich falsch liege:
- "sh" -Skript! = "Bash" -Skript
- Linux-Skripte sind in Bash geschrieben
- Bash-Skript normalerweise
#!/bin/sh
- In GNU / Linux
/bin/sh
ist Bash - In FreeBSD
/bin/sh
ist nicht Bash, es ist die wahresh
Wenn ich also ein Linux-Skript in FreeBSD verwenden möchte und ./script.sh
in der Shell ausgeführt werde, wird das Bash-Skript in "sh" und nicht in Bash ausgeführt, da /bin/sh
in FreeBSD nicht Bash ist.
Gibt es eine Möglichkeit, diese Bash-Skripte auszuführen, ohne sie zu ändern? Also keine Änderung an der #!/bin/sh
Anweisung in der Skriptdatei, um auf eine andere Stelle zu verweisen?
Wenn möglich, möchte ich das Bash-Skript über Zsh ausführen. Ich möchte Bash nicht installieren und da Zsh Bash-Skripte ausführen kann ...
bash
shell-script
freebsd
portability
user1115057
quelle
quelle
bash
Skript ausführen, ohne es zu installierenbash
" entspricht der Aussage "Ich möchte ein Python-Skript ausführen, ohne Python zu installieren". Wenn es sich um einbash
Skript handelt, sollte es mit einembash
Interpreter ausgeführt werden .Antworten:
Sie können Ihre Lieblings-Shell mit dem Skript als Parameter aufrufen.
quelle
./filetoexecute.sh
ist schneller zu schreiben alsbash filetoexecute.sh
oderzsh filetoexecute.sh
. Auch seltsam, wie du es sagst ... bash ./something ... Ich habe noch nie jemanden gesehen, der das ./ als Argument verwendet hatIch führe FreeBSD selbst aus. Ich habe festgestellt, dass das Starten des Skripts mit den folgenden Funktionen die Kompatibilität zwischen Betriebssystemen erheblich verbessert:
quelle
Sie haben darum gebeten, Sie zu korrigieren, wenn Sie sich geirrt haben. Ich werde es versuchen:
bash
, andere fürdash
und hoffentlich viel trinkbar für jede POSIX-kompatible Shell.bash
Funktionen#!/bin/bash
basieren , wird dringend empfohlen, einen Shebang zu habendash
odermksh
auf Debian sein.sh
Implementierungen. Welches ist wahr"? Unter FreeBSDsh
basiert auf der Almquist-Shell wiedash
oder NetBSDsh
. Unter OpenBSD basiert es aufpdksh
vielen kommerziellen Unices auf ksh88 (die Grundlage für die Unix / POSIX-sh
Spezifikation). Einige-ksh88
basierte Shellsbash
sind die einzigen zwei Shells, die als Unix-kompatiblesh
Implementierung zertifiziert wurden (wenn sie mit den richtigen Flags erstellt wurden und wenn sie sich in der richtigen Umgebung befinden).Wenn Sie Skripte mit
/bin/sh
shebang haben und möchten, dass sie von ausgeführt werdenzsh
, können Sie versuchen, das Skript an zu übergebenzsh
. Dies schlägt jedoch fehl, sobald dieses Skript ein anderes Skript aufruft (und Sie es nicht ändern möchten).Ich sehe also nur die Möglichkeit, einen symbolischen Link von
/bin/sh
zu Ihnen zu habenzsh
. Ich empfehle dies jedoch nicht , da dies drastische Auswirkungen auf Ihre Startzeit haben kann und Ihnen bei einigen Ihrer Linux-Skripte nicht einmal hilft.quelle
zsh
als/bin/sh
entweder, kann es nicht Auswirkungen des Bootens , dass drastisch. Dank seines modularen Aufbaus ist es schlanker alsbash
. Es ist im Allgemeinen auch schneller alsbash
und hat einige Optimierungen, die einige ansonsten schlankere / schnellere Schalendash
nicht haben (wie das Optimieren einiger Gabeln). Unter FreeBSD würde das Ändern von sh in bash oder zsh tatsächlich die Leistung beeinträchtigen.zsh
stattbash
, sondern statt einer schnellen Scripting-Shell. Ein weiteres Problem, das hier noch nicht behoben wurde, ist, dass Skripte für Linux, die nirgendwo anders getestet wurden, möglicherweise GNU-Erweiterungen für Standardtools verwenden. Daherbash
würde selbst die Installation nicht helfen.Wenn Sie wirklich Linux - basierten geschrieben Skript ausgeführt werden soll ,
/bin/bash
ohne Modifizierung sie in FreeBSD, dann können Sie einfach kopieren/usr/local/bin/bash
zu/bin/bash
auf FreeBSD und es wird funktionieren.quelle