1

いくつかのジョブを実行する bash スクリプトがあります。niceサーバー上での優先度を下げるために、これらのジョブを実行できるようにしたい場合があります。

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

私のbashスクリプトには変数がありますNICE。私は次の2つのことのいずれかを行います。

# either nice is set
NICE="nice"

# or it is left unset
NICE=""

次に、次を使用してジョブを実行します

"$NICE$ ./a.out

スクリプトの後半。

の場合は機能しますが、 が のままNICE="nice"の場合は機能しません。NICENICE=""

これを回避する 1 つの方法は、if ステートメントを使用することです。

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

しかし、これは 1 行ではなく、5 ~ 6 行のコードになります。

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

4

1 に答える 1

2

最初の推測はほぼ正しいです。

Bashのmanページから(強調鉱山):

明示的な null 引数 ("" または '') は保持され、空の文字列としてコマンドに渡されます。値を持たないパラメーターの展開の結果として生じる、引用符で囲まれていない暗黙の null 引数は削除されます。 値のないパラメーターを二重引用符で囲んで展開すると、null 引数が生成され、保持され、空の文字列としてコマンドに渡されます。 引用符で囲まれた null 引数が、展開が null でない単語の一部として表示される場合、null 引数は削除されます。つまり、単語 -d'' は、単語分割と null 引数の削除後に -d になります。

したがって、あなたの場合、引用符を削除するだけです:

$NICE ./a.out

の値に応じて$NICE、次の 2 語のコマンドに展開されます。

'nice' './a.out'

または 1 語のコマンド:

'./a.out'

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

于 2016-11-08T10:52:58.243 に答える