- - PR -
ssh経由で echo "hello!!!" > test.txt をしたいのですが。。。
投稿者 | 投稿内容 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-06-21 09:46
いつも大変お世話になっております。
Linuxマシンが2台あります。 WS01 WS02 WS01からWS02へはパスワードレスでssh接続ができるようになっておりまして、WS01側でシェルスクリプトを実行して、WS02のtest.txtにテキストをリダイレクトしたいと思っております。 [user@WS01 user]# ssh user@WS02 echo "hello!!!" > test.txt ではWS02のtext.txtには書き込まれませんでした。 正しくはどう書けばよろしいでしょうか。 何卒ご教授のほどよろしくお願いいたします。 | ||||||||||||||||||||
|
投稿日時: 2005-06-21 10:16
おはようございます.
手順を端折らないで順番にやるほうがよろしいのでは? まず ssh で ws01 -> ws02 に login した上で その command を叩くとどうなりますか? | ||||||||||||||||||||
|
投稿日時: 2005-06-21 10:18
ご返答ありがとうございます。
sshでログインした上で echo "hello!!!" > test.txt をたたくと、成功いたします。 | ||||||||||||||||||||
|
投稿日時: 2005-06-21 11:21
おはようございます。
ssh による通常のリモートコマンド ( ssh user@host command ) から 2ひねり必要ですね。 1. クライアント側に送られてくる出力をサーバ側でリダイレクト ssh user@host command > file では、クライアント側でリダイレクト処理がされますから、 ssh user@host 'command > file' もしくは、ssh user@host command \> file ですね。 2. コマンドの実行はクライアント側 つまり、リモートでは「入力結果を保存する」ためのコマンドを指定して、クライアント側で実行したコマンドの出力をパイプで渡す形になります。つまり、 command | ssh user@host command2 ( command2 は入力結果を保存するためのもの ) 以上、ご参考まで。 | ||||||||||||||||||||
|
投稿日時: 2005-06-21 11:48
angelさま、いつもお世話になっております。
な、なんと。あっさり成功しました。 ご教授いただきありがとうございます。今後ともよろしくお願いいたします。 | ||||||||||||||||||||
|
投稿日時: 2005-06-21 13:49
別スレッドにすべきかもわかりませんが。。
[user@WS01 user]$ ssh user@WS02 'echo "hello!!!" > test.txt' で成功しましたので早速shellスクリプトにしてみましたら #!/bin/sh STRMSG="hello!!!" ssh user@WS02 'echo $STRMSG > test.txt' とやるとtest.txtには空文字列しか入りませんでした。 もちろん #!/bin/sh ssh user@WS02 'echo "hello!!!" > test.txt' とやると成功したのですが、わけあってどうしても変数でやりたいと思っております。 どのように書けばよろしいでしょうか。 何卒ご教授よろしくお願いいたします。 | ||||||||||||||||||||
|
投稿日時: 2005-06-21 14:08
どこがローカルで実行されているコマンドで、 どこがリモートで実行されているコマンドなのか、 見分ける努力しましょう。 また、特に理由が無いなら、/bin/shじゃなくて/bin/bashで動かす スクリプトにしましょう。 また、#!/bin/bash -x や #!/bin/bash -v あたりに変更して実行すれば、 実際のパラメタ展開の様子も把握できます。 今自分がわかってないだろうことを把握するためのひとつの手段です。 上記だと、3行目部分がシェルに解釈される時点では、 シングルクォート内の変数は展開されないため、
が実際には実行されるコマンドになります。 なので、リモートで実行されるコマンドは
になります。 変数はリモートでやっとこさ展開されます。
とか、
とか。 変数をリモートで定義してリモートで展開する例と、 変数をローカルで定義してローカルで展開する例を書いてみました。 | ||||||||||||||||||||
|
投稿日時: 2005-06-21 14:33
この手のスクリプトは、変数展開とクォートが、実は予想以上に難しいので注意が必要です。
正しくは、 ssh user@WS02 "echo '$STRMSG' > test.txt" もしくは ssh user@WS02 echo \\'"$STRMSG"\\' \> test.txt ※その他、 ssh user@WS02 "echo \"$STRMSG\" > test.txt" とか ssh user@WS02 echo "$STRMSG" \> test.txt とか ssh user@WS02 echo \\'$STRMSG\\' \> test.txt とか、紛らわしい例も… ちなみに、 STRMSG="hello!!!" は、本当に正しく動作しますか? STRMSG='hello!!!' でないとマズくないでしょうか。 [ メッセージ編集済み 編集者: angel 編集日時 2005-06-21 14:38 ] |