我在 BASH 脚本中使用调试模式来跟踪脚本已执行的命令。到目前为止,这一切都很好,但现在我需要运行一个命令,其中包含一个字符串中的一些选项,并且该字符串包含在调试模式下似乎会导致问题的引号。
这是一个简短的例子
#!/bin/bash
job_opts='-q long -M5000000 -R"select[mem>5000] rusage[mem=5000]"'
set -x
bsub $job_opts # .... more options for job here
set +x
此脚本使用 bsub 命令生成对 lsf 作业队列的提交,但这无关紧要。在 STDERR 我看到这个跟踪:
+ bsub -q long -M5000000 '-R"select[mem>5000]' 'rusage[mem=5000]"'
Job submission rejected.
bsub 命令应该如下所示:
+ bsub -q long -M5000000 -R"select[mem>5000]' 'rusage[mem=5000]"
所以我的 bsub 命令失败了,我也可以看到这是因为它没有看到 -R 开关,大概是因为整个开关周围有额外的单引号。
我知道 BASH 在调试模式下在带引号的字符串周围加上单引号,但我没想到这会影响正在发出的实际命令,这似乎已经发生了。
我在这里做错了什么还是有什么办法可以避免在 BASH 调试模式下进行这种额外的引用?以这种方式记录命令非常方便,所以如果我因为那些讨厌的引用而不能再这样做了,那将是一种耻辱。
谢谢你的帮助!