今日覚えたshell Tips(ネットワーク越しにごにょごにょ編)

| コメント(4) | トラックバック(0)

あるときネットワーク越しにいろいろなことやりたくて、shellのコマンド調べていて覚えたことを覚え書き的に記しておきます。
下記はコマンドラインから、ネットワーク越しにその場で書いた内容のファイルを作る方法です。

% cat <<EOT | ssh $SERVER "cat > /path/to/file"
content
content
content
content
EOT

これの応用で、パッチを複数サーバであてたいときは、

% cat <<EOT | ssh $SERVER "cat > /path/to/patch"
--- /path/to/orig   2005-11-29 13:45:42.129125170 +0900
+++ /path/to/new   2005-11-29 13:46:27.540536045 +0900
@@ -1,3 +1,3 @@
 aaa
-bbb
+ddd
 ccc
EOT
% ssh $SERVER "patch < /path/to/patch"

とか、もっとやるとファイルなぞ作らなくても直接patchをあてちゃったりできる。

% cat <<EOT | ssh $SERVER patch
--- /path/to/orig   2005-11-29 13:45:42.129125170 +0900
+++ /path/to/new   2005-11-29 13:46:27.540536045 +0900
@@ -1,3 +1,3 @@
 aaa
-bbb
+ddd
 ccc
EOT

こんな感じです。知ってる人には常識中の常識なのかもしれませんが…。

あと自分は複数サーバで同時にあるコマンドを実行したいときは下記のようにコマンドラインでやっちまいます。
Borne Shellでは

% for x in 192.168.0.1 192.168.0.2 192.168.0.3; do command; done

tcshだったら

% foreach x (192.168.0.1 192.168.0.2 192.168.0.3)
foreach?command
foreach?end

みたいな感じで。サーバのIPはserver_list.txtとかに1サーバ1行で書いてcatする方法でもいけます。

んで疑問なのは、tcshでborne shellみたいにコマンドラインで1行でone-linerが書けないのかということなんですが、調べてみたんですがどうもできなそうなんですよね…。教えてエラい人!(注:NDOメソッド)

トラックバック(0)

トラックバックURL: http://blog.clouder.jp/mt/mt-tb.cgi/553

コメント(4)

どうぞ。
% echo 'for x in 192.168.0.1 192.168.0.2 192.168.0.3; do command; done' | /bin/sh

ぬ…確かにそれでできるけどw
これだとborne shell使ってるからなんか負けた気がする…。

% foreach x (192.168.0.1 192.168.0.2 192.168.0.3); command; end

こんなことできないのかな~と思って。


っ% sudo rm `which tcsh`

っ% foreach x (192.168.0.1 192.168.0.2 192.168.0.3)^Jcommand^Jend

(^J はtcshではなぜか C-v C-m で入力; 他のshellでは C-v C-j)

キタ━━━━(゚∀゚)━━━━!!

% foreach x (1 2 3)^Jecho $x^Jend

とかでいけました。これは詰りエスケープシークエンスで改行コードを入れるのか。
C-v C-mだと^JでC-v C-jだと^Mが入力されるな…。

コメントする

検索

広告

月別 アーカイブ

OpenID対応しています OpenIDについて
Powered by Movable Type 5.12