如何在我的bash脚本中添加一个`nice`开关

时间:2016-11-08 10:29:57

标签: bash scheduling jobs nice

我有一个运行一些作业的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"设置为NICENICE=""无效时,此功能无效。

一种方法是使用if语句:

if [ "$NICE" == "nice" ]
then
    nice ./a.out
else
    ./a.out
fi

但这会变成5行或6行代码,而不仅仅是一行。

是否有可能完成我尝试使用NICE作为变量来启动具有良好或不好的可执行文件的内容?

1 个答案:

答案 0 :(得分:1)

你的第一个猜测几乎正确。

从Bash手册页(强调我的):

  

保留显式空参数(""或'')并传递给命令     作为空字符串。不带引号的隐式空参数,由     删除没有值的参数的扩展。 如果是参数     没有值在双引号内扩展,为空参数     结果并保留并作为空字符串传递给命令。     当引用的null参数显示为其扩展的单词的一部分时     如果为非null,则删除null参数。也就是说,-d''     在分词和删除空参数后变为-d。

因此,对于您的情况,您可以简单地删除引号:

$NICE ./a.out

,根据$NICE的值,将扩展为以下双字命令:

'nice' './a.out'

或单字命令:

'./a.out'

您可以使用set -x来帮助调试此类扩展 - 它会打印扩展的单词列表,以便您可以查看是否存在问题。