2

シェルスクリプト内から実行されるコマンドで一重引用符を使用するのに問題があります。私のスクリプトでは、パラメーターとして-u''(<-2つの一重引用符)を持つ必要があるrdesktopコマンドを実行します。ただし、引用符をどのようにエスケープしようとしても、正しく渡されません。

$ commandをエコーするだけで出力は正常になり、実行すると奇妙な出力が作成されます

これは、機能しないスクリプトの一部です。

command="rdesktop -u "\'\'" $server"
`$command`

また、直接実行してみました。

`rdesktop -u "\'\'" $server`

シェルスクリプトで文字をエスケープするためのチュートリアルをかなり読んだのですが、解決策が見つからなかったので、助けていただければ幸いです。

編集:

興味深いことに、私が使用するだけなら

command=rdesktop -u '' $server

エコーすると、出力は問題ありませんが、

$command

それは失敗します...

4

3 に答える 3

2

シェルがbash、ksh、またはzshの場合、文字列ではなく配列を使用してコマンドを作成する方がはるかに安全で簡単です。

command=( rdesktop -u '' $server )

このように実行します

"${command[@]}"

リモートサーバーが文字通りの名前のユーザー名(つまり、2つの一重引用符)を確認する必要があるとは想像できません''。おそらく、空の文字列だけが必要です。

于 2012-05-24T10:01:19.117 に答える
0

まず、入力すると

`rdesktop something`

次に、それは、を呼び出しrdesktop、出力を取得し、その出力をコマンドとして実行することを意味します。「直接実行」するには、次のように入力します

rdesktop something

今引用のために。実行した場合

rdesktop -u '' $server

その後rdesktop、引用符は表示されません。これらは、コマンドを解析するシェルの一部として削除されます。rdesktop引数を確認するには、次''を使用します

rdesktop -u "''" $server

二重引用符で囲まれた文字列内では一重引用符は特別ではないため、エスケープを追加する必要はありません。

編集:変数内のコマンドで実行したいのがそれを実行することだけである場合、この引用符の削除は1回だけ行われることに注意してください。

cmd="rdesktop -u '' $server"
$cmd
于 2012-05-24T06:30:10.627 に答える
0

を呼び出すrdesktop -u '' $serverと、3つの引数を使用してrdesktopを呼び出します。2番目の引数は空の文字列です。バックティックでそれを呼び出そうとしている理由は私にはわかりませんが、コマンドの最初の定義を使用して必要なものを取得できます。

eval $command

の内容を完全に制御しないと$server、これは大きなセキュリティリスクになることに注意してください。(たとえば、serverが文字列の場合; cmd、evalを呼び出すと実行されますcmd

于 2012-05-24T09:38:26.060 に答える