Я пытался найти вопросы, подобные этому, которые охватывают решение для меня, но ни один из них, который я мог бы найти, полностью не отвечал на мой точный вопрос.
Я хотел бы запустить команду в подоболочке внутри вызова eval и получить код состояния, возвращаемый функцией, вызываемой в подоболочке.
Например, я вызываю такую команду:
eval "$(some_command)"
if [ "${?}" -ne 0 ]
then
# do stuff if `some_command` returned status code not equal to zero
fi
Эта функция some_command
возвращает список переменных окружения и их назначений следующим образом:
$ some_command # Execute some_command in a standard fashion without eval or subshell
some_env_variable='some_value'
another_env_variable='another value'
Цель состоит в том, чтобы запустить эту единственную команду, чтобы добавить эту переменную среды в текущую среду. Единственный способ сделать это — вызвать some_command
внутри подоболочки и заставить eval оценить результирующий вывод. Если я сделаю это без подоболочки, eval просто запустит some_command
, но не будет оценивать свой вывод, чтобы добавить переменную среды в текущую среду.
Это работает:
$ eval "some_command"
-bash: some_command: command not found
$ echo $?
127
Это работает:
$ $(some_command)
-bash: some_command: command not found
$ echo $?
127
Но это не работает:
$ eval "$(some_command)"
-bash: some_command: command not found
$ echo $?
0
Должен быть какой-то способ получить результирующий код состояния от some_command, но я не смог определить, как это сделать. Любая помощь приветствуется!
eval
? - person Paul Hodges   schedule 10.01.2019eval
практически незаменим; вам нужно доверять программе, чтобы она производила безопасный для оценки результат.ssh-agent
— это часто используемый пример, когда он предназначен для использования сeval $(ssh-agent -s)
. - person chepner   schedule 10.01.2019