Запись команд в файл из сценария оболочки

Я хочу записать некоторые строки команд в файл, но некоторых команд, записанных в $(...) быть оцененным. Я хочу $(...) это для сохранения.

Я попробовал следующее:

cat > .git/hooks/pre-commit << EOM
#Colors
RED='\033[0;31m'
NC='\033[0m' # No Color

# Javascript unit tests 
res=$(script -q /dev/null ./tests/hooks/non-ui-test-hook )
RESULT=$?
[ $RESULT -ne 0 ] && echo -e "$res" && exit 1
echo -e "All test cases passed.\n"
exit 0
EOM

Это пишет в файле после содержания:

#Colors
RED='\033[0;31m'
NC='\033[0m' # No Color

# Javascript unit tests
res=Warning: Could not find any test files matching pattern: test
No test files found
RESULT=1
[  -ne 0 ] && echo -e "" && exit 1
echo -e "All test cases passed.\n"
exit 0

Как я могу сохранить $(...) в выходном файле?

1
задан 6 June 2017 в 16:39

2 ответа

Можно альтернативно выйти $:

\$(...)
\$

в Вашем коде:

cat > .git/hooks/pre-commit << EOM
#Colors
RED='\033[0;31m'
NC='\033[0m' # No Color

# Javascript unit tests 
res=\$(script -q /dev/null ./tests/hooks/non-ui-test-hook )
RESULT=\$?
[ $RESULT -ne 0 ] && echo -e "$res" && exit 1
echo -e "All test cases passed.\n"
exit 0
EOM
4
ответ дан 3 December 2019 в 06:30

Заключите индикатор конца в кавычки здесь документ, EOM в Вашем случае:

cat > .git/hooks/pre-commit << 'EOM'
...
...
EOM

Выход с помощью двойных кавычек или обратной косой черты сделал бы также:

cat > .git/hooks/pre-commit << "EOM"
...
...
EOM

Или

cat > .git/hooks/pre-commit << \EOM
...
...
EOM
<час>

Вы, возможно, не заметили, но RESULT=$? также был расширен до RESULT=1 т.е. статус выхода script... внутренняя часть замена команды.

Только ради полноты, если Вы хотите, чтобы некоторое расширение произошло, но не другие, необходимо следовать за тем, что Вы в настоящее время имеете и выходите из тех, Вы хотите сохранить с типичными методами выхода.

2
ответ дан 3 December 2019 в 06:30

Другие вопросы по тегам:

Похожие вопросы: