揮発性のメモ2

http://d.hatena.ne.jp/iww/

bash

bashで、そのコマンドがあるかどうかチェックする

コマンドhogeが、実行できるかどうかをチェックする つまり、実行ファイルか エイリアスか 関数か を判定する hogeが実行ファイルかどうかを判定する $ which hoge /usr/local/bin/hogewhichコマンドでチェックする。 成功すれば、何が実行されるかパスを表…

readで hoge=1 を分割する

IFS='=' read A B < /tmp/piyo.txt echo $A=$B http://linuxjm.sourceforge.jp/html/GNU_bash/man1/bash.1.html

dateコマンドでミリ秒まで出す2

A=$(printf "%.23s" "$(date +'%Y-%m-%d %H:%M:%S.%N')") http://d.hatena.ne.jp/iww/20120616/date

標準エラー出力を赤くする

標準エラー出力を赤く表示するコマンド bash: print stderr in red color - Server Fault ここの color というコマンドがスーパー超便利 コード .bashrcにでも書いとく color() { set -o pipefail; "$@" 2>&1>&3|sed $'s,.*,\e[31m&\e[m,'>&2; } 3>&1 使い方…

現在使っているシェルの名前を知る方法

今使用中のシェルを調べる方法。 ログインシェルではなく、そのスクリプトを実行するときに使われてるシェルを知りたい。 とりあえず、シェバングにdash書いたら dashと表示させたい。 $SHELLを使う SHELLはログインシェルなので、今使われているシェルを表…

ファイルが出来るのを待つ。すでに出来てたら待たない。

inotifywait はエッジトリガなので、待ち始める直前にファイルを作られると詰む。 inotifyfilewait (){ FILENAME="$1" DIRNAME=`dirname $FILENAME`/ while [ ! -f $FILENAME ]; do inotifywait -q -e CREATE -t 1 $DIRNAME >/dev/null done } 使い方:指定…

ファイルを1行読んで変数に入れる

遅いし1行じゃない VAL=`cat /tmp/hoge.txt` 速いし1行だけ読める read VAL </tmp/hoge.txt ループの中はできるだけ内部コマンドだけで頑張りたい readコマンドを使うとき、ファイルが開けない等のエラーが発生したときのエラーメッセージを 2>/dev/null では非表示に出来ないので、事前にちゃんとファイルチェックをおこないそもそもエラーが発生しないよう気を使うこと

bashのif文

いろんなサイトのコピペ。 印刷して壁に貼っとく用。あとでどんどん追記する。 数値系 真の条件 備考 "$A" -eq "$B" A==B "$A" -ne "$B" A!=B "$A" -lt "$B" A 小なり "$A" -le "$B" A "$A" -gt "$B" A > B 大なり "$A" -ge "$B" A>=B 文字列系 真の条件 備…

bashで文字列の辞書比較をするときには、演算子を""で囲う

$ [ "A" < "B" ] && echo OK -bash: B: そのようなファイルやディレクトリはありません $ if [ "A" < "B" ]; then echo OK; fi -bash: B: そのようなファイルやディレクトリはありません [ はコマンドなので、大なり > や小なり 思ったとおり動作させさいと…

JDでDAT落ちしたログを消去する

Tips - JD for Linux Wiki - JD for Linux - OSDN これだと消し忘れが残るので一応全部消すように変更した #!/bin/sh DIR=${JD_CACHE:-~/.jd} find $DIR -type f -regex ".*/info/[0-9]+\.info$" \ | xargs grep -H "status =" \ | perl -nle '/^(.*)\/info\…

パイプの途中のエラーを取る

bash3.2.25とbash4.1.5で実験 参考:http://mlog.euqset.org/archives/linux-users/106994.html システム変数PIPESTATUSを使う $ (exit 1) | (exit 0) | (exit 3) | (exit 0) $ echo ${PIPESTATUS[@]} 1 0 3 0 PIPESTATUSという配列に、最後にパイプ使ったと…

コマンドライン引数の取得

./a.out abc あいうえお '' 山田みたいなのをコマンドラインで渡したときの引数の取り方と、取れ方 java public class hoge { public static void main(String[] args) { System.out.println( "args.length=" + args.length ); for (int i=0; i

gitのタイムスタンプをコミット時の時刻にする

本当はオリジナルのタイムスタンプを復元したいんだけど、それは失われるらしい http://stackoverflow.com/questions/2179722/checking-out-old-file-with-original-create-modified-timestamps このスクリプトが何用かわからなかったので、改造して使えるよ…

日付フォーマット出力

2012-10-03 16:33:58 みたいに出力する perl my ($S,$M,$H,$d,$m,$Y,$x) = localtime(); my $date = sprintf( "%04d-%02d-%02d %02d:%02d:%02d", $Y+1900,$m+1,$d,$H,$M,$S ); print "$date\n"; use POSIX qw(strftime); $date = strftime( "%Y-%m-%d %H:%M:…

bashで変数にタブコードを入れる

a b みたいな文字列を作りたい。 bashの制御コードの置換機能をつかう $'\t' とかで、制御コードを置換できる $ echo a$'\t'b a b $ A=a$'\t'b $ echo "$A" a b $ A=$'a\tb' $ echo "$A" a b

ファイル名の分解

EZ-NET: シェルスクリプトでファイル名や拡張子名を取得する - Linux シェルスクリプト プログラミング に書いてあるとおりに実施 #!/bin/sh FILENAME=$1 DIRNAME=`dirname "$FILENAME"` EXTNAME=`echo ${FILENAME##*.} | tr a-z A-Z` FILENAME_WITHOUT_EXT=…

Linux用自己解凍実行ファイル

普通はパッケージにするから無用な技術だけど こういう構成にすればLinuxでも自己解凍するインストーラとかが作れる

dashにはブレース展開が無い

bashにはブレース展開がある $ cat brace.sh for i in {1..4}; do echo $i; done $ bash brace.sh 1 2 3 4 $ dash brace.sh {1..4} squeezeだかlennyの頃から/bin/shがdashになっているので、この罠にかかると死ぬ。

function: not found

#!/bin/dash set -e function hoge { echo hoge } hoge $ ./hoge.sh ./hoge.sh: 5: function: not founddashには function が無い。 なるほど。ふざけんな。 関数定義はbashでも動作するように hoge () { でおこなうこと。 あと、dashはecho文でエスケープシ…

CVSで指定したタグに含まれるファイルとバージョン一覧を表示

バージョン管理システム CVS を使う http://vox.nishimotz.com/cvs/taglist.txt これを改造して出力をちょっとコンパクトにする。 #!/bin/sh # tag の名前を引数で指定すると、そのファイル名で # 構成するファイルのバージョン一覧を出力する・改 if [ $# -…

ファイルから数字を読んで1足してまた書き戻す

echo $((`cat /tmp/hoge 2>/dev/null`+1)) > /tmp/hogeファイルが無いときは1を書く

bad interpreter

/usr/bin/perl でも /bin/shでも、なんであれ bad interpreter の原因の95%は改行コードの誤り。