2016-11-08 14 views
1

私はいくつかのジョブを実行するbashスクリプトを持っています。ときには、サーバー上の優先度を下げるために、niceでそれらのジョブを実行できるようにしたいと考えています。bashスクリプトに `nice 'スイッチを追加するには

たとえば、実行可能ファイルがa.outの場合は、端末nice a.outから実行してジョブの優先度を下げることができます。

私のbashスクリプトには、変数NICEがあります。私はその後、スクリプトで

"$NICE$ ./a.out 

を使用して、私のジョブを実行

# either nice is set 
NICE="nice" 

# or it is left unset 
NICE="" 

:私は、次の2つのことのいずれかを実行します。

NICE="nice"が、NICEを残して、NICE=""に設定しても動作しない場合に動作します。この周り

一つの方法は、if文を使用することです:

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

をしかし、これは5つのまたは6のコードの行だけではなく、単一の行になります。

NICEを変数として使用して実行しようとしていたことを、実行可能ファイルをnicenessまたはnicenessで起動することは可能ですか?

+1

引用符を削除してください: '$ NICE ./a。out " – user000001

+2

または単にスクリプトの先頭に' #renice -10 $$ 'を置くことで、いつでも末尾の'# 'を削除することができます。 –

+0

'' $ NICE $。/ a.out'は "うまくいく"とは思っていません。 –

答えて

1

あなたの最初の推測はほぼです。

明示的なヌル引数(「」または「」)を保持し、 として空の文字列をコマンドに渡されますbashのmanページ(強調鉱山)から

。値を持たないパラメータの 展開の結果として、引用符で囲まれていない暗黙のヌル引数が削除されます。 値がないパラメータ が二重引用符で展開された場合、ヌル引数 が保持され、空の文字列としてコマンドに渡されます。 引用符で囲まれたヌル引数が、拡張 が非ヌルの単語の一部として現れると、ヌル引数が削除されます。つまり、-d "' という語は、単語分割とヌル引き数の削除後に-dになります。

だからあなたの場合のために、あなたは単に引用符をドロップすることができます:

$NICEの値に応じて、
$NICE ./a.out 

、以下の2ワード命令に展開されます:

'nice' './a.out' 

または1ワードコマンド:

'./a.out' 

set -xを使用すると、この種の拡張をデバッグするのに役立ちます。展開された単語リストが表示されるので、何か問題があるかどうかを確認できます。

関連する問題