Я хочу записать некоторые строки команд в файл, но некоторых команд, записанных в $(...)
быть оцененным. Я хочу $(...)
это для сохранения.
Я попробовал следующее:
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
Как я могу сохранить $(...)
в выходном файле?
Можно альтернативно выйти $
:
\$(...)
\$
в Вашем коде:
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
Заключите индикатор конца в кавычки здесь документ, 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...
внутренняя часть замена команды.
Только ради полноты, если Вы хотите, чтобы некоторое расширение произошло, но не другие, необходимо следовать за тем, что Вы в настоящее время имеете и выходите из тех, Вы хотите сохранить с типичными методами выхода.