Передайте замененную команду для работы в сценарии оболочки ⇐ Linux
-
Anonymous
Передайте замененную команду для работы в сценарии оболочки
Я пытаюсь передать общую функцию другой функции в качестве замещающей команды. Однако я не понимаю деталей оценки и того, когда возвращается и используется код выхода или стандартный вывод.
Я написал этот скрипт для тестирования:
#!/bin/sh # также протестировано с /bin/bash на Ubuntu 22.04 с тем же результатом. # код выхода 1, результат pass_stituted_command() { результат=$($1) эхо "$?" echo "результат: $result" } pass_stituted_command "$(echo false)" # код выхода 0, результат pass_stituted_command() { результат=$($1) эхо "$?" echo "результат: $result" } pass_stituted_command "$(false)" # код выхода 0, результат ложный pass_stituted_command() { результат = 1 доллар эхо "$?" echo "результат: $result" } pass_stituted_command "$(echo false)" # код выхода 0, результат pass_stituted_command() { результат = 1 доллар эхо "$?" echo "результат: $result" } pass_stituted_command "$(false)" # код выхода 0, результат pass_stituted_command() { результат=$($1) эхо "$?" echo "результат: $result" } pass_stituted_command "$(echo 'test'; echo false)" # код выхода 0, результат проверки\nfalse pass_stituted_command() { результат = 1 доллар эхо "$?" echo "результат: $result" } pass_stituted_command "$(echo 'test'; echo false)" Из ответа в этом посте SO я ожидаю, что все примеры, кроме двух последних, будут вести себя как первый. Для последних двух я ожидаю, что код выхода будет равен 1, и каждый результат будет проверен.
Может ли кто-нибудь объяснить, почему это не так и как этого добиться? Спасибо!
Я пытаюсь передать общую функцию другой функции в качестве замещающей команды. Однако я не понимаю деталей оценки и того, когда возвращается и используется код выхода или стандартный вывод.
Я написал этот скрипт для тестирования:
#!/bin/sh # также протестировано с /bin/bash на Ubuntu 22.04 с тем же результатом. # код выхода 1, результат pass_stituted_command() { результат=$($1) эхо "$?" echo "результат: $result" } pass_stituted_command "$(echo false)" # код выхода 0, результат pass_stituted_command() { результат=$($1) эхо "$?" echo "результат: $result" } pass_stituted_command "$(false)" # код выхода 0, результат ложный pass_stituted_command() { результат = 1 доллар эхо "$?" echo "результат: $result" } pass_stituted_command "$(echo false)" # код выхода 0, результат pass_stituted_command() { результат = 1 доллар эхо "$?" echo "результат: $result" } pass_stituted_command "$(false)" # код выхода 0, результат pass_stituted_command() { результат=$($1) эхо "$?" echo "результат: $result" } pass_stituted_command "$(echo 'test'; echo false)" # код выхода 0, результат проверки\nfalse pass_stituted_command() { результат = 1 доллар эхо "$?" echo "результат: $result" } pass_stituted_command "$(echo 'test'; echo false)" Из ответа в этом посте SO я ожидаю, что все примеры, кроме двух последних, будут вести себя как первый. Для последних двух я ожидаю, что код выхода будет равен 1, и каждый результат будет проверен.
Может ли кто-нибудь объяснить, почему это не так и как этого добиться? Спасибо!
Мобильная версия