理系学生日記

おまえはいつまで学生気分なのか

shell

Starshipを使ってシェルプロンプトをカスタマイズする

重い腰を上げてWindowsマシンでCygwin環境を構築することにしたとき、やはり気になるのがシェル環境です。 As-is Starship プリセット プロンプト設定の何が嬉しいのか 設定 As-is 僕のメインPCであるMacでは、以下のようなプロンプトを使っていました。 Pow…

特定の順序で Terraform を実行したい

Terraform で State を分割すると、たくさんの root module ができます。 ある root module が別 module の remote state 参照を持つとき、module 間に依存関係が生じます。 僕たちはこの依存順に terraform を apply しなければなりませんし、その逆順に de…

配下の全ディレクトリで同じ操作を行いたい

カレントディレクト配下にある全ディレクトリで同じ操作をする時って多いのではないでしょうか。 例えば作っている terraform 群が要求する Provider のバージョンをあげて、全部 terraform init して回らないといけなくなったりとか。 find と xargs を組み…

declare、typeset、そして local

declare とか typeset、local まわりの使い方について。 まず、declare と typeset は、シノニムなので、この 2 つの差異は考えなくて良いと思います。このため、ここでは declare でひとまとめにして扱いたいと思います。 そういうわけで、declare と local…

シェルスクリプトで部分文字列を切り出す

ときどき、シェルスクリプトで文字列の 3 文字目から 4 文字を切り出したいみたいなユースケースがあって、これまでずっと cut でやってた。 $ echo $str 1234567890 $ echo $str | cut -c3-6 3456 これ、じつは文字列操作でできる。 $ echo ${str:3:4} 4567…

シェルスクリプトにおける [ と [[

シェルスクリプトで条件分岐を書くとき、[ を使ったり [[ を使ったりすることになると思います。 POSIX の test にも記載がありあすが、[ は test と同じ機能を持つことになっており、同じ実装であることも多いです (ただし、[ として実行されるか、test と…

BashのGlobに関わるオプション

前に Bash の Glob に関するエントリを書きました。 他にも Glob には様々な応用があります。 あまり知られていないような使い方も多いので、それらをご紹介していくコーナーです。 extglob Glob で正規表現と not 条件を表現できるようになる。 詳細につい…

BashのGlobは積極的に利用しましょう

bash には glob というものがあります。glob ってなによっていう人も ls *.sh とかを展開する bash の機能ですよっていうと分かるかと思います。 この glob の機能って多用されますがあまりマニュアルとか読んだ人もいないと思うので、簡単にまとめてみます…

シェルスクリプトでのtrapの使い方

シェルスクリプトでシグナルをトラップするには、みたいなことを考えることがあって、そういえば trap という日頃なかなか思い出されない不憫なビルトインがあることを思い出しました。trap は bash のビルトインとして存在する便利なヤツですが、忘れられが…

シェルスクリプトでテンプレート処理 (envsubstの使い方)

シェルスクリプトで、テンプレート処理を行いたいというケースがあります。 ここでいうテンプレート処理について、以下のようなテンプレート(ここでは template.tt と呼びます)があった場合を例示します。 property1=${hoge} property2=${fuga} 以下のように…

シェルスクリプトでの IP アドレス計算

まぁ、ipcalc 使いましょう。initscripts に含まれてるので、基本つかえるとおもいます。 |tcsh| $ rpm -qf which ipcalc initscripts-9.03.40-2.el6.centos.1.x86_64 ||< ブロードキャストアドレスやネットワークアドレスは次のようにして計算できます。 |t…

シェルスクリプトのバッドパターン

シェルスクリプトでバッチ組んだけど性能が出ません、止まってるように見えます、みたいな相談を受けた。 大量のデータを扱うバッチだったので DB 処理待ちになっているもんだと思っていたのだけれど、状況を調べてみると DB サーバ側の負荷はまったくなく、…

Bash のプロセス置換が便利な件

Bash にはプロセス置換という便利な機能があります。しかしこの機能、あまり知名度が高くない。 ぼくは毎日の労働に疲れ果てているし、日本学生支援機構という組織から毎月金を請求され、しまいには信用情報機関に登録される寸前までいくような生活を送って…

スクリプトに出てくる${1+"$@"}

時々、スクリプトを見ていると ${1+"$@"} なんて記述にでくわす。例えば、これは Perl スクリプトだけれど、cpanm の実装では |perl| !/Users/kiririmode/perl5/perlbrew/perls/perl-5.14.1/bin/perl eval 'exec /Users/kiririmode/perl5/perlbrew/perls/per…

条件分岐での複文実行

オシャレかどうかは個人の趣向によるのだけれど、あんまし大した条件分岐でもないのに if/else 文を書くというのは行き過ぎだろと思うときが結構ある。こういうときは短絡評価させる、みたいな方が分かりやすくて良いかなと思っていた。 単純な例を書く。 # …

シェルスクリプト面白挙動

**こんなのつくる. |zsh| !/bin/bash cat myfile | while read line do exit 2 done echo "out of loop" ||< **myfile はこんな感じ |zsh| $ perl -e 'print map { "$_\n" } "a" .. "z"' > myfile ||< **実行する |zsh| $ ./test.sh out of loop ||< おーー…