oinume journal

Scratchpad of what I learned

Shell

direnvから.envをロードする

.envrcファイルに dotenv と書くだけで、現在いるディレクトリの .env ファイルを読んでくれる素敵な仕様を発見した。これでdirenv使いながら.env形式しか受け付けないアプリケーションにも対応できてめでたしめでたし。 以下は具体的な例。 $ cat .env PORT…

Shellで絶対パスを取得する

よく忘れてしまうのでメモ。例えば実行するスクリプトの絶対パスを取得する場合。 #!/bin/sh DIR=$(cd $(dirname "$0") && pwd) echo $DIR $ sh ~/Dropbox/code/sh/abspath.sh Users/kazuhiro/Dropbox/code/sh

Shellでset -uした時の引数の取り扱い

#!/bin/sh DIR=$1 rm -rf $DIR/ なんてやると$1がなかった時に / が消されてしまうので非常に危険。こういう場合は set -u して、未定義の変数があればエラーにすることが推奨される。 /Users/kazuhiro/Dropbox/code/sh/set_u.sh: line 3: $1: unbound varia…

Shellでset -e の状態を解除するにはset +e

"set -e": 実行コマンドが0以外の終了コードの場合、シェルスクリプトを終了する - RX-7乗りの適当な日々にある通り、Shellスクリプトで set -e すると実行結果が0以外の場合、勝手にスクリプトが終了する。で、この挙動をスクリプトの途中で元に戻したい(=…

Shellでgetoptsを使ってコマンドライン引数の解析

だいぶ前の話、Perlを使わないでShellスクリプトで頑張っていた頃、Shellでコマンドラインオプションの解析をやる時は #!/bin/sh for OPT in $* do case $OPT in '-x' ) FLAG_X="TRUE" ;; '-y' ) shift FLAG_Y="TRUE" VALUE_Y=$1 ;; esac shift done if [ "$…

Shellで配列のマージ

Shellスクリプトで配列のマージってどうやるんだろうって思ったので調べてみたら、${ARRAY[*]} か ${ARRAY[@]} で配列の要素を全部取得できるらしいので、それを () 使ってマージすればいいらしい。 #!/bin/sh ARRAY1=(1.1.1.1 2.2.2.2) ARRAY2=(3.3.3.3 4.4…