2023-09-01から1ヶ月間の記事一覧

入力データの追加を監視する(シェルスクリプト)

課題 次々と入力されるデータを監視し、そのデータに対して処理を行いたい。 解決策 tail コマンドの -f オプションを利用する。 これはファイル(または名前付きパイプ)に追加されるデータをリアルタイムで監視して出力するものである。 tail コマンドは P…

ターミナルに蒸気機関車を走らせる(シェルスクリプト)

課題 会議中に暇になったのでターミナルでアニメーションを表示したい。 解決策 sl コマンドを利用する。 sl コマンドはジョークコマンドの一種である。 sl コマンドを実行するとターミナル上にアスキーアートの蒸気機関車が走る。 sl コマンド実行時の様子 …

行番号を付加する(シェルスクリプト)

課題 後続の処理で利用するためにパイプラインを流れるデータに行番号を付加したい。 解決法 以下のような方法がある。 nl コマンドを利用する awk コマンドを利用する sed コマンドを利用する cat コマンドを利用する nl コマンドを利用する nl コマンドは…

個人のエイリアス設定を回避する(シェルスクリスプト)

課題 作成した環境とは別の環境で、あるシェルスクリスプトを起動したとき、うまく実行されなかった。 どうやら実行環境のエイリアス設定が影響しているようだ。 例えば .bashrc で以下のようなエイリアスが設定されている。 alias rm='rm -i' rmコマンドで …

「何もしない」コマンドを利用する(シェルスクリプト)

課題 ヌルコマンドという何もしないらしいコマンドの存在理由がわからない。 解決法 ヌルコマンド(:)は、呼び出しても何も実行せず、"たいていは"成功を返すコマンドである(失敗させる実行方法は今回は述べない)。 ヌルコマンドはその特異性により実は…

映画『かがみの孤城』舞台挨拶 内容書き起こし(2023/09/17)

注意事項 個人的にメモとして書き留めていたものを書き起こしたものです。 細かい言い回し等まで完璧に再現できているものではありません。 また内容に誤りを含む可能性があります。 ご了承ください。 致命的な誤りがありましたら修正しますのでご指摘をお願…

簡易的に条件分岐する(シェルスクリプト)

課題 複雑ではない条件分岐のために毎回 if 文を記載するのが面倒くさい。 他に条件分岐する方法は無いのか。 解決法 && リストを利用する。 && リストはもともと左右両方のコマンド(パイプライン)が成功したときに成功を返すことを表現する構文である。 …

簡易的に引数をチェックする(シェルスクリプト)

課題 例えば個人的に利用するようなスクリプトでは、厳格な引数チェックを行う必要はないだろう。 一方で、明らかな誤りを弾くために、ある一定のレベルでは引数チェックを行いたいときがある。 どのような引数チェックができるのか。 解決法 引数の数をチェ…

標準入力の内容を逆順に出力する(シェルスクリプト)

課題 標準入力を逆順に出力する方法をたくさん知りたい! 入力例は以下とする。 $ seq 1 10 1 2 3 4 5 6 7 8 9 10 解決法 tac を使う 言わずとしれたコマンド。 GNU coreutilsに含まれる。 コマンド名は cat の逆順に由来。 もちろん POSIX 非規定なので注意…

見通しよくファイルの一覧を確認する(シェルスクリプト)

課題 ls コマンドでファイルの一覧を確認するとき、ファイルの数やファイル名の長さによって表示がまちまちになり、分かりづらい。 $ pwd / $ ls Applications Users cores home sbin var Library Volumes dev opt tmp System bin etc private usr 解決法 ls…

「それ」を解釈するのは誰?(シェルスクリプト)

課題 以下のようなディレクトリ構造を考える。 $ tree . ├── dirl1 │ ├── dirl2 │ │ └── scriptl2.sh │ └── scriptl1.sh └── scriptl0.sh このディレクトリを再帰的に探索して、すべてのシェルスクリプトのファイル(拡張子が.shのファイル)を出力するため…

スクリプト名を取得する(シェルスクリプト)

デバッグ等の目的でスクリプト名を取得して出力したい状況はしばしば発生する。 シェルスクリプトでは$0を参照することでスクリプト名を取得することができる。 例えば以下のようなスクリプトを作成する。 $ cat testscript.sh #!/bin/sh echo $0 このスクリ…