ホーム DoRuby 自分のファイル名を見て振る舞いを変えるシェルスクリプト
自分のファイル名を見て振る舞いを変えるシェルスクリプト
 

自分のファイル名を見て振る舞いを変えるシェルスクリプト

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。


長いことsshコマンドの横着方法を検討しておりましたが「これでいいや」と思うことにしました。そこで使った小技を書きます。

linux を覚えたころ bashrc や bash_profile に alias xxx=’ssh -p 65522 -l loginu’ のようなことをしていました。.ssh/config を利用することで scp, rsync のときにオプションが落ちるという課題が解決されましたが、他のマシンに移動させるときや対象を増やすときの手数が少し多いことが課題でした。若干原始的ですが実行ファイルを作成する方法です。

環境

$ uname -mprsv
Darwin 17.7.0 Darwin Kernel Version 17.7.0: Thu Jun 21 22:53:14 PDT 2018; root:xnu-4570.71.2~1/RELEASE_X86_64 x86_64 i386
$ bash --version
GNU bash, version 4.4.12(1)-release (x86_64-apple-darwin16.4.0)
## 省略 ##

基礎:実行すると自身のファイル名を返すスクリプト

#!/bin/bash

basename $0

※ 適当な名前のファイルにして実行権限を与えておきます。

解説
$0 を呼び出すとコマンド名(ファイル名) が返されます。
パスも含まれる為 basename で脱がせます。ファイル名だけになります。

応用:ssh横着に役立てる

~/bin/localhost というパスのファイルを作成しました。

#!/bin/bash

timestamp=`date "+%y%m%d_%H%M%S"`$1
mkdir -p $HOME/sshlog
DST=`basename $0`
logfile="$HOME/sshlog/$USER.`uname -n`_to_$DST.$timestamp.log"
ssh $DST $* | tee $logfile
echo $logfile

所感

  • ln -s ~/bin/localhost ~/bin/サーバー名とすることで1回のコマンドで接続先を増やすことができます。.bashrc を書き換えて、source コマンドを実行してみたいにしなくてよいです。
  • 変数展開を利用すればより複雑なコマンドの実行もできそうです。
  • こういうスクリプトなどを書くことを想定してホストの命名規則やミドルウェアの構成が整理されているとスクリプトに例外用のコードを書く手間が省けます。
記事を共有

最近人気な記事