я соединили следующее обнаружить, если запущен скрипт на Bash или нет:Detect ли сценарий руководят Bash
################################################################################
# Checks whether execution is going through Bash, aborting if it isn't. TinoSino
current_shell="$(
ps `# Report a snapshot of the current processes` \
-p $$ `# select by PID` \
-o comm `# output column: Executable namename` \
|\
paste `# Merge lines of files ` \
-s `# paste one file at a time instead of in parallel` \
- `# into standard output` \
|\
awk `# Pick from list of tokens` \
'{ print $NF }' `# print only last field of the command output`
)"
current_shell="${current_shell#-}" # Remove starting '-' character if present
if [ ! "${current_shell}" = 'bash' ]; then
echo "This script is meant to be executed by the Bash shell but it isn't."
echo 'Continuing from another shell may lead to unpredictable results.'
echo 'Execution will be aborted... now.'
return 0
fi
unset current_shell
################################################################################
Я не прошу вас конкретно к проверке кода потому, что вы бы отправьте меня в CodeReview; мой вопрос:
- как бы вы о тестирования ли это «исполнение охранник» поставили в верхней части моего сценария действительно делать свою работу надежно?
Я думаю об установке виртуальных машин и на каждую машину, чтобы установить такие вещи, как zsh
, csh
и т.д. Но это выглядит слишком много времени для меня. Лучшие способы сделать это?
Если вы заметили немедленную ошибку, сообщите мне об этом, пожалуйста. Просто ослепительные ошибки размахивают ногами, ожидая, что их раздавят. должен быть сжатым, я думаю.
Как вы начали свой сценарий? './foo.sh' или' bash foo.sh' или 'sh foo.sh'? (предположим, что в том же каталоге) – Kent