На моем настольном хосте человечности, если я запускаю скрипт только со строкой
echo $SHELL
это печатает
/bin/bash
Но на другом хосте, работающем busybox, если я делаю то же самое, я добираюсь
/bin/sh
печатный
И я заметил, что, если я создаю сценарии на своем поле человечности и выполняю их на хосте busybox затем иногда, я получаю другое поведение.
То, что я хотел бы сделать, создают ярлык на моем рабочем столе человечности к некоторому терминальному сеансу, который выполнил бы Оболочку Bourne,/bin/sh, а не Границу Снова Shell, удар. Это возможно или является моими взглядами об этой несправедливости?
В первую очередь, необходимо читать о POSIX и различных реализациях оболочки. Затем при необходимости в мобильности попытайтесь записать сценарии, максимально совместимые POSIX.
Для тестирования Ваших сценариев для работы с busybox можно установить и выполнить busybox оболочку по умолчанию ash
проверять Ваш синтаксис сценариев для работы с busybox:
sudo apt install ash
ash
# non-posix function declaration (works in bash, but not in ash)
$ function test(){ echo Hello World; }
ash: 1: Syntax error: "(" unexpected
# posix-compliant function declaration (works in ash and bash)
$ test(){ echo Hello World; }
$ test
Hello World
Но это не могло бы быть достаточно, поскольку это будет все еще использовать версию GNU инструментов по умолчанию и имеет все Ваши другие установленные программы, которые, вероятно, не установлены с Вашим busybox.
ash
$ grep --version
grep (GNU grep) 2.25
Если у Вас есть докер, можно выполнить a busybox
контейнер только с его инструментами по умолчанию:
docker run -it --rm busybox
$ grep --version
grep: unrecognized option `--version'
BusyBox v1.29.3 (2018-10-01 22:37:18 UTC) multi-call binary.