2017-02-13 8 views
0

У нас есть сценарий с кодом возврата. Напримерbash return value in pipe to bash

#!/bin/bash 
exit 42 

который работает отлично:

$ ./script ; echo $? 
42 

, но если я иду:

$ bash << EOF 
./script ; echo $? 
EOF 
0 

так печатает 0, в то время как можно было бы ожидать, что она по-прежнему печати 42

+1

У вас здесь нет трубок, вы используете bash для обработки heredoc –

ответ

6

Ваш $? расширяется перед выполнением скрипта. Если вы не хотите, чтобы ваши переменные расширяться в heredoc (не труба) поместить в одинарные кавычки имя:

bash <<'EOF' 
./script; echo $? 
EOF 

Это Виль предотвратить $? от раскрывания при переходе строки в новую команду bash. Вместо этого он будет оцениваться в строке, к которой вы, похоже, собираетесь идти.