我想将几行命令写入文件,但一些写入的命令正在$(...)
被评估。我希望$(...)
保留这些命令。
我已尝试以下操作:
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
您也可以选择退出$
:
\$(...)
\$
在您的代码中:
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
答案2
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...
仅出于完整性考虑,如果您希望进行某些扩展而不进行其他扩展,则需要遵循当前所拥有的,并使用典型的转义方法来转义您想要保留的扩展。