- - PR -
こんなことをshellスクリプトで出来ますか?
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2003-06-04 21:01
お世話になります。Redhat8.0を使用しております。普通なら
[root@ws01]#pwd /root [root@ws01]#echo "Hello 'test' !!" > test1.txt [root@ws01]#cat test1.txt Hello 'test' !! となるのに [root@ws01]#ssh root@ws02 'echo "Hello 'test' !!" > test2.txt' とやると [root@ws02]#pwd /root [root@ws02]#cat test2.txt Hello test !! となってシングルクォーテーションが入ってくれません。。 どうにかしてシングルクォーテーションもSSH経由でリダイレクトしたいのですが、どうすればよいでしょうか。。 ご教授願います。 [ メッセージ編集済み 編集者: okumura 編集日時 2003-06-04 21:02 ] |
|
投稿日時: 2003-06-04 21:59
エスケープすればいいとは思いますが,
ssh root@ws02 'echo "Hello \\'test\\' !!" > test2.txt' なんて単純にやってもたぶんダメでしょうね・・・。 ちょっと工夫して, ssh root@ws02 'echo "Hello '\\'test\\'' !!" > test2.txt' なんかでどうでしょう? (「test\」の直後は,ダブルクォーテーションにも見えますが シングルクォーテーション2つです。 「!!」の直後はダブルクォーテーションです。) # いやー,この会議室でバックスラッシュとクォーテーションの # 組み合わせ書くのって,ちょっとコツがいるんですね。 # プレビューでは期待通りの表示だったのに・・・。 # で,直しました。 [ メッセージ編集済み 編集者: raccoon 編集日時 2003-06-04 22:04 ] |
|
投稿日時: 2003-06-05 08:31
な!なんと!!成功しました!ありがとうございます。。
しかし、これはいったいどういう構造なのでしょうか。 まず(かっこ)で分けたいと思います ssh root@ws02 {'echo "Hello (’\)’test(’\)’ !!" > test2.txt'} この分け方はあってますでしょうか。。その場合(’\)が何を意味していてどういう役割を担っているのかがわかりません(泣)。恐れ入りますがご教授願います。 |
|
投稿日時: 2003-06-05 13:09
よかった成功して。
sshで試す環境がなくてちょっと自信なかったんです(^^ 分け方としてはこうです。 ssh root@ws02 {'echo "Hello ’(\’)test(\’)’ !!" > test2.txt'} クォーテーションはシェルが特別な解釈をする文字ですが,シェルには 「\の直後の文字は特別な解釈をせず,文字そのものとして扱う」 というルールがあります。これにより,(\’)はシェルに解釈されずに (’)そのものとしてコマンドに渡されます。 また,シングルでもダブルでも,同じクォーテーションはネストできなくて 最初の対で区切られてしまいます。 (違うクォーテーションがネストしてると,外側のほうだけ解釈される) したがってこの引数はシェルにより ●’echo "Hello ’ → シェルが’を解釈してはずす ●\’test\’ → \’なので解釈せず’として扱う ●’ !!" > test2.txt’ → シェルが’を解釈してはずす という操作が行われ, echo "Hello 'test' !!" > test2.txt という文字列としてコマンドに渡されます。 ちなみに最初の ssh root@ws02 'echo "Hello 'test' !!" > test2.txt' という書き方の場合は, ●’echo "Hello ’ → シェルが’をはずす ●test → 何もしない ●’ !!" > test2.txt’ → シェルが’をはずす と操作され,コマンドに渡された時点で echo "Hello test !!" > test2.txt という’が消えた文字列になってしまいます。 例えばこんなスクリプトを作っていろいろ試してみるといいでしょう。 シェルがどう解釈してコマンドに渡すかわかると思います。 #! /bin/sh echo $1 # これで「'aaa bbb'」と「aa'a b'bb」が同じ結果になる # というのを最初に知ったときはちょっとビックリでしたよ。 |
|
投稿日時: 2003-06-05 23:20
おどろきました。。こんなに分かりやすいご説明を受けたのは初めてです。なるほどそういうことなのですね?
大変感謝しております。ありがとうございました。またよろしくお願いいたします。 |
1