Wenn es sich um ein Skript handelt, rufen Sie das Skript einfach als auf
bash scriptname.sh
Links müssen nicht geändert werden.
Für kompilierte ausführbare Dateien können Sie chroot Route gehen:
mkdir rootfs
cp -a /usr rootfs/
cp -a /lib rootfs/
cp -a /lib64 rootfs/
cp /bin/bash rootfs/bin/sh
cp yourprogram rootfs/
sudo chroot rootfs sh
Und dann führen Sie Ihr Programm oder sudo chroot rootfs /yourprogram
In der Praxis gibt es jedoch keinen Grund, warum Sie nicht /bin/bash
als Symlink zu verwenden können /bin/sh
. Tatsächlich verwendete Ubuntu vor Version 6.10/bin/bash
as /bin/sh
und wechselte dann aufgrund /bin/sh
einer viel schnelleren und schlankeren Implementierung von POSIX /bin/sh
(dh es entspricht dem POSIX-Standard für das Verhalten von Unix-ähnlichen Betriebssystem-Dienstprogrammen und Betriebssystemen und einige ihrer Interna implementieren) und aus Gründen der Portabilität. Ich empfehle dringend, auch Gilles 'Antwort zu lesen, um historische Notizen darüber zu erhalten, wie es dazu /bin/dash
kam. Aus Gründen der Kompatibilität werden Skripte, die für die dash
Verwendung von POSIX-Funktionen geschrieben wurden bash
, als Standard-Shell ausgeführt. Normalerweise ist es umgekehrt, was Probleme verursacht -bash
verfügt über Funktionen, die von nicht benötigt werden /bin/sh
, wie die <<<
Syntax oder Arrays.
Darüber hinaus wurde der betreffende Befehl wahrscheinlich unter Berücksichtigung von RHEL oder CentOS geschrieben, das /bin/bash
als Symlink zu verwendet /bin/sh
wird. Es schlägt zwei Dinge vor: Sie zielen wahrscheinlich auf ein bestimmtes Betriebssystem ab und haben die POSIX-Prinzipien nicht eingehalten. In diesem Fall ist es auch eine gute Idee, zu überprüfen, welche anderen Dinge der Befehl erfordert, da Sie möglicherweise mehr Probleme haben, als nur eine erneute Verknüpfung vorzunehmen, wenn er wirklich für ein anderes Betriebssystem geschrieben wurde /bin/sh
.