Unengineered Weblog

PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND

2022-01-01から1年間の記事一覧

go generateでクオート、標準出入力を扱う。

まとめ //go:generate sh -c "m4 -DVAL=\"hello world\" hello.go.m4 > hello.go" 注意点 //go:generateディレクティブ以降に指定されたコマンドはシェルで実行されるわけではない。 だからシェルが提供する機能であるクオート、標準出入力は使えない。 ただ…

Goのファイルシステムfs.FSを実装するときのヒント

pkg.go.dev fs.FSを実装するには次のインターフェースを満たす具象型を実装しなければならない。 fs.FS fs.File and / or fs.ReadDirFile fs.DirEntry fs.FileInfo 多いね。それぞれのメソッドとインターフェースの関係は次の図で表すことができる。 例えば…

POST RequestをハンドルするシンプルすぎるHTTPサーバー

github.com Usage postsrv [-flag] cmd [arg ...] postsrvはとてもシンプルなHTTPサーバー。 カレントディレクトリをサーブするファイルサーバーとほとんど同じだが、/uploadはPOSTリクエストをハンドルする。 POSTリクエストのBodyが標準入力を通してcmdへ…

POSIXのmanをインストール

Unixにはシステムコールやライブラリ(C言語)、コマンド(シェルスクリプト)などのインターフェースを定義したPOSIXという規格がある。移植性の高いソフトウェアの開発を容易にすることを目的としており、GNU/LinuxやmacOS, BSDなどはPOSIXにだいたい準拠…

Unixのファイルシステムを9Pでサーブするu9fsを「ちょっと」使う

github.com u9fsはPlan 9に付属している(のに)Unix向けのソフトウェアである。これはUnixのファイルシステムをPlan 9の通信プロトコル9Pでサーブし、Plan 9でマウントすることを目的としている。私は初め使い方が全く分からなかったので、私と同じ人のため…

君はPythonでcatが実装できるか?

これは技術ブログでない。ただの日記だ。 皆様はPythonでUnixのコマンドcatを実装できますでしょうか?それっぽいのではなく、ちゃんと標準の/bin/catと同じ動作するものを作ろうとすると意外と引っかかる部分が多いと思います。 まず最も単純な実装(cat1.py…

awkでpstreeを実装

タイトル通り。 github.com [init]-+-[systemd-journald] |-[systemd-udevd] |-[systemd-oomd] |-[systemd-resolved] |-[systemd-timesyncd] |-[acpid] |-[avahi-daemon]---[avahi-daemon] |-[@dbus-daemon] |-[irqbalance] |-[python3] |-[polkitd] |-[powe…

sedのコマンドとして使える英単語

sedの置換表現s/foo/bar/のセパレータは/でなくても良い。\と\n以外の1byteキャラクターなら何でも良い。だからsequenceも使える。 $ echo _qu_ | sed sequence _nc_ 他に使える英単語は?次のシェルスクリプトを使って探そう。 #!/bin/sh words=/usr/share/…

ダム端末でzshをまともに使う方法(9term, Acme, Emacsなど)

zshはmacOSのデフォルトログインシェルである。多機能で便利なシェルであるが、ダム端末で使われることを想定していないようだ。この記事ではダム端末とはshellやコマンドの出力をそのまま表示する端末のこととしよう。Acme, 9term, Emacs shellなどはダム端…

シェルスクリプトでpickを作った(シェルスクリプトのwhile read...の中で対話的なreadをする方法)

Brian W. KernighanとRob Pikeの「Unixプログラミング環境」にはpickと呼ばれるコマンドが紹介されている。 これは対話的にプログラムを処理するためにシェルスクリプトで書かれたツールである。pick args...とすると、引数を一度に1つずつ表示しユーザーの…

Termuxのトリビア

新しいものが見つかるたびにこまめに更新する予定 TermuxはAndroid上でLinuxのシェルが動かせるアプリケーションである。現在はF-Droidまたは直接apkをダウンロードすることによりインストールができる。このページではルート化していないAndroidについて述…

非技術的なUnixのブログ

僕はUnix (Plan 9, Linux, *BSD, macOS, ...)で遊んでいます。その記録を残すためにこのブログを始めました。遊んでいるだけなので、ITエンジニアには役に立たないであろう情報が多いと思います。 Unixに関係する自己紹介 UbuntuとmacOSがメインのオペレーテ…