2

次のようなbashスクリプトにsedコマンドがあります。

sed -i 's/db.url=.*/db.url='$URL'/' config.properties

URL var は次のように割り当てられます。

$URL=jdbc\:oracle\:thin\:@\/\/hostname\:12345\/XYZ

この bash スクリプトをホスト上で実行すると、意図したとおりに動作し、URL が URL で指定されたものに置き換えられます。ただし、bash スクリプトにコマンドを追加して、他のホストでこれを行うと、次のようになります。

ssh user@host02 <<EOF
 sed -i 's/db.url=.*/db.url='$URL'/' config.properties
exit
EOF

次のエラーが表示されます。

sed: -e expression #1, char 47: unknown option to `s'

ここで何が起こっているのか知っている人はいますか?

4

2 に答える 2

2

式がローカル ホストで実行されている場合は適切に引用符を付けましたが、文字列はリモートホストsedのシェルに渡され、そこで引用符が外され、グロブとして展開されます。最も簡単な方法は、コマンドを標準入力経由でリモート シェルにパイプすることです。そのため、引用符について心配する必要はありません。*

echo "sed -i 's/db.url=.*/db.url=$URL/' config.properties" | ssh user@host02 bash

複数のコマンドを使用する場合は、ヒア ドキュメントの使用を検討できます。

ssh user@host02 bash <<EOF
command1
sed -i 's/db.url=.*/db.url=$URL/' config.properities
command2
EOF
于 2013-06-10T15:53:33.237 に答える