シェルスクリプト」カテゴリーアーカイブ

[GNU Screen] .screenrc に環境依存の設定を書く方法

スポンサード リンク

zshなどのシェルでは設定ファイル内部で条件分岐を記述できるので,.zshrcに

if [ `hostname` = "hoge" ]; then 
  source $HOME/.zshrc_hoge
fi

と書けば,特定のホストhogeだけで.zshrc_hogeが読み込まれる。もうちょっとエレガント?にしたいなら次のようにも書ける。

[ -f $HOME/.zshrc_`hostname` ] &&  source $HOME/.zshrc_`hostname`

こうして様々な環境用の設定ファイルを統一しておくと,gitやらdropboxで設定ファイルを共有するときに非常に楽だ。マシンによってドットファイルの中身がばらばらで,どれが最新版なのかわからない,なんてことを防げるようになる。

非常に便利なので同じようなことをGNU Screenでもやりたいのだが,残念ながら.screenrcでは条件分岐が書けない。そこで,環境変数を使うことにした。
≫ 続きを読む



カテゴリー: コマンドメモ, シェルスクリプト | コメントする

GNU ScreenでSSH接続したいならキーバインドを作るより,シェルのエイリアスを使おう

スポンサード リンク

GNU Screen上で楽にSSH接続を実現する方法として,多段キーバインドを設定する方法が広く使われている。例えば,以下のサイトのように。

開発版GNU Screenで楽々ウィンドウ管理 – Keep It Simple, Stupid

私は複数あるサーバに ssh し易いよう、以下のような感じでランチャ風に多段キーバインドを定義しています。

# alias for remote login
# override default `^V'(digraph) mapping
bind ^V eval 'command -c rlogin' 'echo "select server category: [0]  [1]Web [2] [3] [4] [5]DB [6] [7]Test [8] [9]"'
bind -c rlogin 1 eval 'command -c rlogin1' 'echo "login to: (1 Web)  [1]websvr1 [2]websvr2"'
bind -c rlogin 5 eval 'command -c rlogin5' 'echo "login to: (5 DB)   [1]dbsvr1  [2]dbsvr2"'
bind -c rlogin 7 eval 'command -c rlogin7' 'echo "login to: (7 Test) [1]testweb [5]testdb [6]testdb2"'

# (1 Web/)
bind -c rlogin1 1 eval 'screen -t websvr1 11 ssh websvr1' '@group Web/'
bind -c rlogin1 2 eval 'screen -t websvr2 13 ssh websvr2' '@group Web/'
bind -c rlogin1 3 eval 'screen -t websvr3 16 ssh websvr3' '@group Web/'

# (5 DB/)
bind -c rlogin5 1 eval 'screen -t dbsvr1 51 ssh dbsvr1' '@group DB/'
bind -c rlogin5 2 eval 'screen -t dbsvr2 55 ssh dbsvr2' '@group DB/'

# (7 Test/)
## (7 Test/TestWeb/)
bind -c rlogin7 1 eval 'screen -t testweb 701 ssh testweb' '@group TestWeb/'

## (7 Test/TestDB/)
bind -c rlogin7 5 eval 'screen -t testdb 750 ssh testdb' '@group TestDB/'
bind -c rlogin7 6 eval 'screen -t testdb2 755 ssh oracle@testdb2' 'encoding eucjp' '@group TestDB/'

こうするとssh接続のためのローカルのシェルは不要で,とってもスマートな感じになる。だがしかし,Screenの多段キーバインドを使ってしまうと,例えば上記のWebsvr1に接続するキーは ^a^V11 となり,決して打ちやすくない。いちいちCtrlキーなんて押したくないよ…… そのうえScreenのbindは一文字しか設定できないからとっても困る。

ということで,僕はシェルのエイリアスを使うことにした。 ≫ 続きを読む



カテゴリー: CUIでいこう, コマンドメモ, シェルスクリプト | コメントする

xargsでワイルドカードを使いたいときはシェルを実行しよう

スポンサード リンク

例えば,

$ ls
1.txt 1.dat 1.dat2
2.txt 2.dat 2.dat2
3.txt 3.dat 3.dat2
4.txt 4.dat 4.dat2
5.txt 5.dat 5.dat2
file.txt

$ cat file.txt
1
2
5

というときに,xargs を使ってfile.txtに書いてある数字で,拡張子が.dat*のファイル(つまり,1.dat, 2.dat, 5.dat, 1.dat2, 2.dat2, 5.dat2)に ls -l を適用したいとする。素直に書くと

$ cat file.txt | xargs -I{} ls -l {}.dat*
zsh: no matches found: {}.dat*

とエラーになる。
≫ 続きを読む



カテゴリー: CentOS, Debian, Fedora, コマンドメモ, シェルスクリプト | コメントする

cygwinでgetclip,putclipコマンドをシェルスクリプトで代用する

私のバージョンのCygwin(version 1.7.22-1,64bit)では,クリップボードを読み/書きするgetclip/putclipコマンドはリポジトリから消えているようだ。これにより,古いスクリプトが上手く動作しなかったりするので,シェルスクリプトを使って実装してみる。
≫ 続きを読む

カテゴリー: Cygwin, シェルスクリプト | コメントする

KDEでコマンドラインからスクリーンをロックする

KDEでコマンドラインから画面をロックしたい場合はどうしたらいいのだろうか。Lock your KDE screen from the command line | Tips4Linux.com |  Tips4Linux.comによると,

Did you know you can lock your current KDE screen by using the command line? For the 3.x series use

dcop kdesktop KScreensaverIface lock

and for KDE 4.x try

qdbus org.freedesktop.ScreenSaver /ScreenSaver Lock

とのこと。僕の場合はKDE4なので端末上で qdbus org.freedesktop.ScreenSaver /ScreenSaver Lock を実行すればスクリーンがロックされる。
≫ 続きを読む

カテゴリー: CentOS, Debian, Fedora, Linux, シェルスクリプト | コメントする

cshのシェルスクリプトで「イベントが見つかりません」のエラーがでるとき

cshのシェルスクリプトを作っていて,「イベントが見つかりません」や「Event not found.」とエラーがでるときは,cshのヒストリ置換が失敗している可能性がある。

もし,シェルスクリプト内部に ! が書き込まれているなら,\ でエスケープしてみることをおすすめする。例えば

echo "#!/bin/csh"

はエラーになるが,

echo "#\!/bin/csh"

とすると正常に実行される。

カテゴリー: Linux, コマンドメモ, シェルスクリプト | コメントする