
2026/02/05 4:59
いつでもご用意いたします。修正や整形したい文書がございましたら、ぜひテキストを貼り付けてくださいませ。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Summary
著者は個人用の
~/bin ディレクトリを作成し、 $PATH に追加してそこにシェルスクリプトを配置し始めました。システムバイナリが多くの共通小文字名(Debian/Ubuntu では約 21,733 個)を占有するため、名前衝突が頻繁に発生しました。角括弧・バックスラッシュ・コロン・バッククオート・シングルクォート・スラッシュ・ドットなどの特殊ファイル名文字はシェルで意味を持つか禁止されており、ファイル名として未使用なのはコンマだけでした。著者はすべての個人用スクリプトにコンマをプレフィックス(例:
,complete-scp、,go-thpgp、,svn-store-password)することで、自身のコマンドがシステムバイナリと衝突しないようにし、すべてのシェルでそれらを普通のファイルとして扱うようにしています。タブ補完は引き続き機能します;先頭にコンマを入力して <TAB> を押すと、カスタムスクリプト全体がリスト表示されます。この慣習は約十年にわたり使用されており、 ~/bin ディレクトリを管理する人には推奨されています。本文
日付: 2009年8月18日
タグ: コンピューティング
多くの Unix ユーザーと同様に、私はずっと前から自分のホームディレクトリに
~/bin/ ディレクトリを作り、そこに置いたスクリプトや便利ツールを $PATH に追加しておりました。これにより、Unix の基本コマンド群を補完する形で、自作のシェルスクリプトやユーティリティを簡単に呼び出せるようになっています。
しかし問題は衝突の可能性でした。私が作成したスクリプト名は短く、低い文字だけのコンパクトなもの(例:
foo, bar など)であるため、Linux が新しいコマンドを追加した際に同じ名前になってしまう恐れがあります。当時の System V Revision 3 ワークステーションではその可能性は低かったものの、Debian の世界に移行すると問題は大きく増しました。Red Hat は比較的少数のパッケージしか提供しないためあまり気になりませんでしたが、Debian では膨大な数のコマンドが存在します。私の Ubuntu ラップトップでも数千ものコマンドが利用可能です。
$ apt-file search -x '^/usr/bin/[^/]*$' | wc -l 21733
解決策は、システムコマンドと衝突しないように自分のコマンド名を調整することでした。私にとって「入力しやすい」とは Shift キーを使わずにタイプできることです。現代のキーボードで未修飾(unshifted)状態で利用可能な文字は非常に限られます。小文字はシステムコマンドに既に使用されているため、括弧・バックスラッシュ・コロン・バッククォート・単一引用符などの特殊文字もシェル上では意味を持ちます。またスラッシュとドットはファイル名で特別な役割(ディレクトリ区切りや隠しファイル、拡張子区切り)があります。
残された唯一の文字が カンマ でした。
簡単に試してみると、カンマはまさに求めていた文字でした。ほぼすべてのツールやシェルで、カンマはファイル名内で完全に普通の文字として扱われます。各自作コマンドの先頭にカンマを付けるだけで、システムコマンドとは明確に区別され、衝突のリスクが消えるのです。
さらに、タブ補完のおかげで自分のコマンド全体を簡単に閲覧できます。あるシステム上で
~/bin/ にどんなコマンドがあるか思い出したり、名前を確認したいときは「カンマ+Tab」を入力するとリストが表示されます。
$ ,<Tab> ,complete-scp ,go-thpgp ,range ,complete-ssh ,gr ,svn-store-password ,coreoff ,hss ,umount ,coreon ,mount-thpgp ,find ,mount-twt
自分の
~/bin/ ディレクトリを持ち、将来システムに追加される可能性のあるコマンドと衝突しないようにしたい方には、このテクニックを心からおすすめします。私は約10年間この方法で問題なく運用できており、非常に頑丈です。そして何より、単純に楽しいので試してみる価値があります。
©2021