シェルスクリプト

バイナリファイル同士を比較したいけどcmpが無かったので頑張った話

id:eel3:20130826:1377522419 と似たようなパターンのネタ。相変わらずbusyboxな組込みLinux環境で作業していて、バイナリファイルを比較しようとしたらcmp(1)が無かった。dirname(1)に引き続き2度目……。組み込んであるbusyboxのdiffがバイナリファイルに対…

関数/メソッドのコード行数の累積グラフを表示する

Software Design 2013年08月号の第2特集にて、コード行数(LOC)の累積グラフがジニ係数のグラフに似ているとの記述があった。Software Design (ソフトウェア デザイン) 2013年 08月号 [雑誌]出版社/メーカー: 技術評論社発売日: 2013/07/18メディア: 雑誌こ…

シェルスクリプト自身のパスを取得しようとしたらdirnameが無かったので頑張った話

シェルスクリプトを書いていて、実行時にそのスクリプト自身のパスを取得したくなった。バッチファイルでいうコレみたいな感じ。 @echo off echo %~dp0 そのスクリプトは環境変数PATHに登録されたディレクトリに置くことはなく、必ずカレントディレクトリか…

Windows PowerShellの罠――trap文概論

PowerShell 1.0の頃から例外処理用にtrap文が用意されていて、これがまた興味深い。trap文の元となったのは、おそらくBourne shellの系統のシェルに用意されている組み込みコマンドtrapだろう。『Windows PowerShellインアクション』1.2.1によれば、PowerShe…

Ubuntuを10.04から12.04にしたらfile(1)の出力内容が変わった

Ubuntu 10.04から12.04.1にアップグレードしたらfile(1)の出力内容が変わった。スクリプトファイルのテキストのエンコーディングを出力するようになったようだ。例えば10.04の頃の出力はこんな感じだった。 # Groovy 2.0.5付属の起動用シェルスクリプトで実…

シンプルで無駄なテキストファイルの読み込み方

シェルスクリプトで1行ずつテキストファイルを読み込む方法を、わざわざ頑張って考えてみた。で、思いついてしまった。ある意味画期的かもしれないけど、頑張る方向を間違えた気がしないでもない。 個々のコマンドはシンプルに、でもアルゴリズムは無駄だら…

test(1)でシンボリックリンクか否か判定する時のオプションは-hなのか-Lなのか?

test(1)を使ってあるファイルがシンボリックリンクか否か判定しようと思い、Linuxのjmanを見てみた。該当するオプションは-hと-Lのようだ。 -hと-L、どちらを使うべきかについてはjmanには書いてなかった。ということはどちらを使っても問題なさそうな気がす…

文字コード&改行コード変換ツールをでっちあげる

これは車輪の再発明。WindowsとLinuxを行き来していると、テキストファイルの文字コードと改行コードを変換したくなる事が結構ある。文字コードの変換だけならiconv、改行コードの変換だけならdos2unixやtrやPerlなどを使えば済む。もっとも大抵は文字コード…

ディレクトリツリーから最下層(リーフ)のディレクトリのみ列挙する

id:eel3:20091026:1256558649 でやり残した宿題みたいなエントリ。元々はWindows上でフォルダツリーを辿り、最下層のフォルダ(つまり中にファイルはあってもフォルダは無いもの)で且つ特定の名前だったらその中にフォルダを作る、ということをやりたかった…

ソースファイル中に定義してある関数の名前を列挙する

仕事をしていて、時々ファイル中の関数名を列挙したいことがある。例えば、単体テストする関数の数が多いので難易度別に分けようと思い立ったけど関数名を一々手作業で列挙するのが面倒なので自動的に抜き出して表にするとか、他人のソースを読む時に関数が…

そろそろ剰余を使わないFizzBuzzについて一言(ry 時代遅れひとりFizzBuzz祭り 剰余無し編

FizzBuzzというニッチな市場*1において更にニッチな「剰余を使わない」分野ではあるものの、どうも需要があるようなので*2書いておく。ひとまず既存ネタから幾つか再録して解説する。それから新作を出そうと思う。 既存ネタ:「事前に答えを用意しておく」ア…

時代遅れひとりFizzBuzz祭り bash編おまけ(TCPクライアント/サーバ版)

id:eel3:20111031:1319989854 のおまけ。bash 2.04以降では/dev/tcpや/dev/udpを使用してネットワーククライアントの処理を記述することができる。これらは実際に/dev以下にデバイスノードが存在する訳ではなく、bash上でのみ有効なシンタックス・シュガーの…

時代遅れひとりFizzBuzz祭り bash編(/bin/sh よりも高速に+α)

時代遅れひとりFizzBuzz祭り、今回はbashのよるシェルスクリプトだ。id:eel3:20100531:1275307408 にて/bin/shによる素のシェルスクリプトでFizzBuzzを書いたのだが、余りに遅かった。今度はbashの拡張機能を使って高速化してみようと思う。移植性というもの…

カーナビ三部作その3:microSDHCにMP3ファイルを書き込む順番で苦労する

id:eel3:20110619:1308413539 の続き。何やら妙なところで色々と苦労したものの、遂にMP3をmicroSDHCに書き込めるようになった。なので早速フォルダごとMP3ファイルをコピー……とはいかない。このmicroSDHCはカーナビで使うのだ。カーナビ――そう、相手は組み…

時代遅れひとりFizzBuzz祭り /bin/sh編

久々の時代遅れひとりFizzBuzz祭り、今回は/bin/sh。要はシェルスクリプト。前回のTclとの繋がりは……何となく雰囲気が似ているから。まあ元々TclはUnixアプリケーションの標準の拡張スクリプト言語としてデザインされたらしいだが、シェルスクリプトはUnix環…