bash
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=なぜなら、パイプを使っているから。 サブシェルになるので変数は…
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 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…
スクリプト書いてるとき、ヘルプと実体を合わせるのが面倒だし コメントに書いたことをヘルプにも書き写すのがアホっぽくなったので できるだけひとつにまとめる実験実行するとこんな感じになる $ ./sabun.sh -h # 差分確認プログラム # 接続先の / と ロー…
ファイルを1行ずつ読んで処理をしたい。 先頭が # で始まっていたらコメント扱いしたいし、空行も読み飛ばしたい。 while read LINE; do #echo LINE=$LINE [ -z "$LINE" ] && continue [ ${LINE::1} = "#" ] && continue /usr/bin/piyopiyo $LINE done < /tm…
/usr/local/bin/hoge: 8: [: missing ] というエラーが出て、その8行目は [ -z "$ADDR"] || ADDR="HOGEHOGE" という塩梅だった。 "[" が文法じゃなくて内部コマンドだということを失念していたため、[ ] を単なる飾りとして見ていて、: missing ってなんだろ…
あの 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…
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/ *を使うと一旦展開されるのがダサいし、そもそもとして隠しファイルがコピーされないのはマズい。
罫線のあるテキストをviで読んだ時に罫線が半角扱いになるためクシャっとなる問題teratermで罫線の表示 2 - 揮発性のメモ の続き Teraterm上で罫線を全角幅で表示する TERATERM.INIを編集 UnicodeToDecSpMapping=0 これにより、端末での表示上は全角になる…
make && echo OK || echo NG 逆に書くと当然アホになる
便利な shell いろいろ Bashについていくつか - 備忘録 beta bash の履歴入力で前方一致検索を有効にする bind '"\e[A": history-search-backward' bind '"\e[B": history-search-forward'コマンドを途中まで打って、カーソルキーの上下でヒストリーを検索で…
flockコマンドをflock関数みたいに使う - 揮発性のメモ リダイレクトでファイルディスクリプタを指定するとき、番号を直接指定しているのがいやだったけど、 変数名を指定することで自動で空いている番号を使用してくれることがわかった 参考:本を読む exec…
dashには配列がない。 配列宣言、初期化 $ A=() $ B=(111 "HOGE" 333) $ C[1]=jikken ()をつけて並べて書くと、添え字0から順につっこまれる 要素数 $ echo ${#B[@]} 3 $ echo ${#C[*]} 1 @でも*でもどっちでもいい。 要素の取り出し $ echo ${B[@]} 111 HOG…
端末をたくさん開いている状態で、 tailとかmakeとか長い処理してると どの端末でなにをしてるかわかんなくなるので、 今実行しているコマンドをTeraTermのウィンドウタイトルに表示したいので、表示した。 .bashrc にこれを書き足す # window title trap 'e…
ケツ10行以内に ?> で始まっている行があれば、怪しいと判断する #!/bin/sh (tail $1 | grep -qe '^?>') && echo $1 find -name "*.php" | xargs -n1 hoge.sh
CTRL+Rで最新から過去の方向へインクリメンタルサーチ開始 (reverse-i-search)`history': history` ' で囲まれた部分が検索対象文字列 インクリメンタルサーチのモードのとき(このプロンプトがでているとき)は CTRL+Rで過去の方向、CTRL+Sで現在の方向へ検…
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 "$_"; } エイリアスだと引数を途中に使えないので関数にする。 失敗したら途中で終わるよう && でつなげる。
#!/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
ApacheでPHPスクリプト起動してるけど、モジュール版なら大丈夫っぽい。 Apacheの設定 AddHandler cgi-script .cgi AddHandler php5-script .php.cgi は環境変数を全部もらえるので、bash(system関数)呼出時に今回の脆弱性に引っかかる。 .php はsystem関数…
@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%'
コマンドhogeが、実行できるかどうかをチェックする つまり、実行ファイルか エイリアスか 関数か を判定する hogeが実行ファイルかどうかを判定する $ which hoge /usr/local/bin/hogewhichコマンドでチェックする。 成功すれば、何が実行されるかパスを表…
IFS='=' read A B < /tmp/piyo.txt echo $A=$B http://linuxjm.sourceforge.jp/html/GNU_bash/man1/bash.1.html
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行じゃない VAL=`cat /tmp/hoge.txt` 速いし1行だけ読める read VAL </tmp/hoge.txt ループの中はできるだけ内部コマンドだけで頑張りたい readコマンドを使うとき、ファイルが開けない等のエラーが発生したときのエラーメッセージを 2>/dev/null では非表示に出来ないので、事前にちゃんとファイルチェックをおこないそもそもエラーが発生しないよう気を使うこと