0

GNU getopt によって自動的に行われるように、コマンド ライン フラグ (オプション) がコマンド ライン引数の前に配置されるようにコマンドを変更したいと考えています。

Mac は BSD getopt を使用しているため、機能が不足しています。1 つのコマンドの実行時に、フラグと引数を解析して並べ替え、並べ替えたコマンドを実行するスクリプトを実行するように、bash を微調整したいと考えています。

このように、どちらも

ls -lh /tmp
ls /tmp -lh

私のMacの端末で動作します。

4

1 に答える 1

2

各コマンドの関数optstringへの引数がどのように見えるかを知らない限り、コマンドラインで引数を並べ替える作業を行う汎用ツールを安全に作成することはできません。getopt()検討:

make something -f makefile
cp   something -f makefile

最初のコマンドでは、コマンドの呼び出しを正規化するために、 と の両方を前に-f移動する必要があります。makefile2 番目では、移動する必要があるのは-f;のみです。次のファイル名も移動すると、コマンドが書き換えられ、データが破壊されます。

もちろん、getopt_long()コマンドが長い形式--forceまたは--file=makefileスタイルの引数を取る場合、引数文字列がどのように見えるかも知っておく必要があります。

率直に言って、Linux の環境で POSIXLY_CORRECT を使用し、それが提供する陰湿な柔軟性を忘れて、常に引数の前にオプションを記述することを学ぶ方がよいでしょう。そうすることで、コードはすべての Unix ライクなマシンでより適切に機能します。


/binGNU ソフトウェアをand以外のディレクトリにインストールすることもできます/usr/bin(たとえば、システム ディレクトリの前に PATH/usr/gnu/binを置くようにします。 GNU からの類似物を持っていません. また、あなたが書いたシェルスクリプトが、あなたと同じセットアップを持っていない他の Mac に移植できないという「危険」があります./usr/gnu/binfink

于 2012-09-10T14:24:34.977 に答える