メガネ
オペレーティングシステム:OS X;クライアント:端末:sh、bash
質問
Commandsに抽象化レイヤーを追加するためのシェルスクリプトを作成していますls
。私はそれを「壊れないように」したいので、まずls
([ls(1) - Linuxのマニュアルページ] [1]を介して)許可されているすべての可能なコマンドを特定して、渡されたオプションに対して別のレイヤーを実行することができました。コマンドラインで制御します。
スクリプトを開始する前に、ls
特定の長いオプション(デュアルハイフン)の一般的な機能が何であるかを調べることにしました。私はこれらの方法のいくつかを試しましたが、それぞれいくつかの点で失敗しました。たとえば、実行結果は次ls --ignore-backups
のようになります。
<dir> <username>$ ls --ignore-backups
ls: illegal option -- -
usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...]
上記は、shを介して実行するかbashを介して実行するかは同じです(経験豊富なユーザーにとっては、これが明らかでなければならないことを知っています)。
この時点でこれを実行しましたが、私のコンピュータのバージョンは単一のman ls
文字オプションのみを許可することがわかりました。ls
質問
- スクリプトを汎用にするにはどうすればよいですか?
- 通常、デフォルトのUNIX / Linuxコマンドにコマンドライン引数を渡すときに操作に使用できる標準ライブラリはありますか?
- UNIX / Linuxコマンドライブラリの基本的な理解が欠けていますか?
注:私は最初にシェルスクリプトに触れ、正しい質問をしているかどうかわかりません。
ベストアンサー1
ls
OS Xを開発してターゲットにする場合は、LinuxのマニュアルページではなくOS Xのマニュアルページを調べて、そこに記載されているオプションに従うことをお勧めします。
あるいは、スクリプトがすべてのUnix実装で「壊れないように」動作することを期待している場合は、やや不運です。すべての実装で見つけることができる共通のオプションセットがありますが、POSIXで定義もちろん、GNUデュアルハイフン拡張など、多くの非標準拡張がありますが、ls
方言やオペレーティングシステムによって異なる可能性がある単一文字オプションもあります。特定のコマンド実装でサポートされているオプションを識別する一般的で移植可能な方法はありません。