Jeśli jest to skrypt, po prostu wywołaj go jako
bash scriptname.sh
W ogóle nie trzeba zmieniać linków.
Aby skompilować plik wykonywalny, możesz wybrać trasę chroot:
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
A następnie uruchom swój program lub sudo chroot rootfs /yourprogram
Jednak w praktyce nie ma powodu, dla którego nie można użyć /bin/bash
jako dowiązania symbolicznego /bin/sh
. W rzeczywistości przed wersją 6.10 Ubuntu używało/bin/bash
jako /bin/sh
, a następnie przełączyło się z powodu /bin/sh
znacznie szybszej i szczuplejszej implementacji POSIX /bin/sh
(to znaczy, że jest zgodny ze standardem POSIX, jeśli chodzi o to, jak powinny zachowywać się narzędzia systemu operacyjnego i systemu operacyjnego uniksopodobnego oraz zaimplementować niektóre z ich elementów wewnętrznych) oraz ze względu na przenośność. Zdecydowanie polecam również przeczytanie odpowiedzi Gillesa, aby zapoznać się z historycznymi notatkami na temat tego, jak /bin/dash
powstało. Jeśli chodzi o kompatybilność, skrypty napisane w celu dash
korzystania z funkcji POSIX będą działały z bash
domyślną powłoką idealnie w porządku. Zwykle jest na odwrót, co powoduje problemy -bash
funkcjami, które nie są wymagane /bin/sh
, takie jak <<<
składnia lub tablice.
Dodatkowo, to polecenie jest prawdopodobnie napisane z myślą o RHEL lub CentOS, które używa /bin/bash
jako dowiązania symbolicznego /bin/sh
, sugeruje dwie rzeczy: prawdopodobnie celowały w określony system operacyjny i nie przestrzegały zasad POSIX. W takim przypadku dobrym pomysłem byłoby również sprawdzenie, jakich innych rzeczy wymaga polecenie, ponieważ jeśli jest napisane z myślą o innym systemie operacyjnym, możesz napotkać więcej problemów niż tylko ponowne połączenie /bin/sh
.