我有一个运行一些作业的bash脚本。有时我希望能够使用nice
运行这些作业来降低服务器的优先级。
例如,如果我的可执行文件是a.out
,我可以从终端nice a.out
运行以降低作业优先级。
在我的bash脚本中,我有一个变量NICE
。我做以下两件事之一:
# either nice is set
NICE="nice"
# or it is left unset
NICE=""
然后我使用
运行我的工作"$NICE$ ./a.out
稍后在剧本中。
当NICE="nice"
设置为NICE
时NICE=""
无效时,此功能无效。
一种方法是使用if语句:
if [ "$NICE" == "nice" ]
then
nice ./a.out
else
./a.out
fi
但这会变成5行或6行代码,而不仅仅是一行。
是否有可能完成我尝试使用NICE
作为变量来启动具有良好或不好的可执行文件的内容?
答案 0 :(得分:1)
你的第一个猜测几乎正确。
从Bash手册页(强调我的):
保留显式空参数(""或'')并传递给命令 作为空字符串。不带引号的隐式空参数,由 删除没有值的参数的扩展。 如果是参数 没有值在双引号内扩展,为空参数 结果并保留并作为空字符串传递给命令。 当引用的null参数显示为其扩展的单词的一部分时 如果为非null,则删除null参数。也就是说,-d'' 在分词和删除空参数后变为-d。
因此,对于您的情况,您可以简单地删除引号:
$NICE ./a.out
,根据$NICE
的值,将扩展为以下双字命令:
'nice' './a.out'
或单字命令:
'./a.out'
您可以使用set -x
来帮助调试此类扩展 - 它会打印扩展的单词列表,以便您可以查看是否存在问题。