揮発性のメモ2

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

bash

bashで、256色表示する

エスケープシーケンスで色を出すやつ \e[48;5;Xm X:0~255 で背景色を指定 \e[38;5;Xm X:0~255 で文字色を指定 #!/bin/bash for x in {0..15}; do for y in {0..15}; do n=$((x*16+y)) printf "\e[48;5;%dm %3d\e[0m" $n $n done echo done TeraTermだとこ…

bashで whileの中でevalを使う

for文で出来る for x in A=hoge B=piyo; do eval $x done echo A=$A echo B=$B A=hogeA B=hogeBwhile文でこう書くとアウト echo -e "A=hoge\nB=piyo" | while read x; do eval $x done A= B=なぜなら、パイプを使っているから。 サブシェルになるので変数は…

bashでjqを使ってJSONの配列をループさせる

jsonの配列をシェルスクリプトとjqでループさせて取得する [ { "ip" : "192.168.10.105", "name" : "玄関" }, { "ip" : "192.168.10.102", "name" : "居間" }, { "ip" : "192.168.10.101", "name" : "トイレ" }, { "ip" : "192.168.10.100", "name" : "寝室"…

sshで、ローカルのスクリプトをリモートで実行する

$ ssh 192.168.0.2 bash < hoge.sh

プログラムの標準出力を別のプログラムの標準入力に渡す

ようするにパイプなんだけど、普通と違う書き方ができる $ ls -l | grep hoge $ ls -l > >(grep .sh)上の2つはだいたい同じような意味合いを持つio redirection - bash exec sending output to a pipe, how? - Stack Overflow Process substitution [Bash H…

bashで、ヘルプと初期設定をひとつにまとめる

スクリプト書いてるとき、ヘルプと実体を合わせるのが面倒だし コメントに書いたことをヘルプにも書き写すのがアホっぽくなったので できるだけひとつにまとめる実験実行するとこんな感じになる $ ./sabun.sh -h # 差分確認プログラム # 接続先の / と ロー…

bashで、ファイルを1行ずつ読む

ファイルを1行ずつ読んで処理をしたい。 先頭が # で始まっていたらコメント扱いしたいし、空行も読み飛ばしたい。 while read LINE; do #echo LINE=$LINE [ -z "$LINE" ] && continue [ ${LINE::1} = "#" ] && continue /usr/bin/piyopiyo $LINE done < /tm…

[: missing ]

/usr/local/bin/hoge: 8: [: missing ] というエラーが出て、その8行目は [ -z "$ADDR"] || ADDR="HOGEHOGE" という塩梅だった。 "[" が文法じゃなくて内部コマンドだということを失念していたため、[ ] を単なる飾りとして見ていて、: missing ってなんだろ…

ネットマスクの /8 とか /16 とかの表記を 255.0.0.0 とか 255.255.0.0 とかに変換するbashスクリプト

あの 192.168.0.1/8 みたいなおしゃれな書き方を Classless Inter-Domain Routing(CIDR:サイダー) と呼ぶらしい。 IPアドレスとサブネットマスクをまとめて表記する:Tech TIPS - @IT #!/bin/bash A=$1 C=$(( 2**(32-$A)-1 )) D=$(( 0xFFFFFFFF^$C )) E1…

192.168.0.1〜192.168.0.254 までpingを打って結果の一覧を作る

echo -e 192.168.0.{1..254}\\n \ | xargs -IXXX -P30 bash -c 'ping -c1 -w1 XXX >&/dev/null; echo XXX $?' \ | sort -V > ping.txt for文で回すと1件ずつしか動かせないので、xargsで30件ずつくらい並行処理する。 並列処理すると当然結果はばらばらにな…

ディレクトリの中身をコピーする

× cp -a hoge/* piyo/ ○ cp -a hoge/. piyo/ *を使うと一旦展開されるのがダサいし、そもそもとして隠しファイルがコピーされないのはマズい。

teratermで罫線の表示 3

罫線のあるテキストをviで読んだ時に罫線が半角扱いになるためクシャっとなる問題teratermで罫線の表示 2 - 揮発性のメモ の続き Teraterm上で罫線を全角幅で表示する TERATERM.INIを編集 UnicodeToDecSpMapping=0 これにより、端末での表示上は全角になる…

結果がOKだったらOK、エラーだったらNGと表示する

make && echo OK || echo NG 逆に書くと当然アホになる

bashのコマンドラインで、コマンドを途中まで打ってからヒストリを検索する

便利な shell いろいろ Bashについていくつか - 備忘録 beta bash の履歴入力で前方一致検索を有効にする bind '"\e[A": history-search-backward' bind '"\e[B": history-search-forward'コマンドを途中まで打って、カーソルキーの上下でヒストリーを検索で…

flockコマンドをflock関数みたいに使う 2

flockコマンドをflock関数みたいに使う - 揮発性のメモ リダイレクトでファイルディスクリプタを指定するとき、番号を直接指定しているのがいやだったけど、 変数名を指定することで自動で空いている番号を使用してくれることがわかった 参考:本を読む exec…

bashで配列

dashには配列がない。 配列宣言、初期化 $ A=() $ B=(111 "HOGE" 333) $ C[1]=jikken ()をつけて並べて書くと、添え字0から順につっこまれる 要素数 $ echo ${#B[@]} 3 $ echo ${#C[*]} 1 @でも*でもどっちでもいい。 要素の取り出し $ echo ${B[@]} 111 HOG…

今実行しているコマンドをTeraTermのウィンドウタイトルに表示する

端末をたくさん開いている状態で、 tailとかmakeとか長い処理してると どの端末でなにをしてるかわかんなくなるので、 今実行しているコマンドをTeraTermのウィンドウタイトルに表示したいので、表示した。 .bashrc にこれを書き足す # window title trap 'e…

末尾に ?> がありそうなPHPファイル一覧

ケツ10行以内に ?> で始まっている行があれば、怪しいと判断する #!/bin/sh (tail $1 | grep -qe '^?>') && echo $1 find -name "*.php" | xargs -n1 hoge.sh

bashで履歴検索

CTRL+Rで最新から過去の方向へインクリメンタルサーチ開始 (reverse-i-search)`history': history` ' で囲まれた部分が検索対象文字列 インクリメンタルサーチのモードのとき(このプロンプトがでているとき)は CTRL+Rで過去の方向、CTRL+Sで現在の方向へ検…

bashの履歴をダブらせない

ignoredupsが効いてない感じがしたので、erasedupsも設定することにした # history export HISTCONTROL=ignoreboth:erasedups export HISTSIZE=2000 export HISTFILESIZE=40000 export HISTTIMEFORMAT='%m/%d %T ' historyコマンド関連のシェル変数 | Cardif…

ディレクトリを作って移動する

ディレクトリを作って移動する mkcd というコマンド mkcd() { mkdir -p "$1" && cd "$_"; } エイリアスだと引数を途中に使えないので関数にする。 失敗したら途中で終わるよう && でつなげる。

ディレクトリごとにCSVファイルの数を数えて出力

#!/bin/sh DIR=$1 DLIST=`find $DIR -type d` for D in $DLIST; do COUNT=`find $D -maxdepth 1 -iname "*.csv"|wc -l` if [ "$COUNT" -gt 0 ]; then echo $D:$COUNT fi done

BASHの脆弱性で、PHPはどうなっちゃうか

ApacheでPHPスクリプト起動してるけど、モジュール版なら大丈夫っぽい。 Apacheの設定 AddHandler cgi-script .cgi AddHandler php5-script .php.cgi は環境変数を全部もらえるので、bash(system関数)呼出時に今回の脆弱性に引っかかる。 .php はsystem関数…

ドラッグ&ドロップでascファイルを解凍するバッチファイル

@echo off set PATH=D:\cygwin\bin;%PATH% set Password=hogehoge set OutputFolder=D:\MyDoc\download set InputFile=%1 set OutputFile=%OutputFolder%\%~n1 bash -c 'echo %Password% | gpg --batch --yes --passphrase-fd 0 -o %OutputFile% %InputFile%'

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 } 使い方:指定…