コマンドを実行するときにデフォルトフラグをどのように使用する必要がありますか?

コマンドを実行するときにデフォルトフラグをどのように使用する必要がありますか?

状況に応じてzshを使用してください。を使用するたびに渡してフラグを指定したいとlocate思います。-i-A

通常、問題を解決できる場合は、alias既存のコマンドと同じ名前のコマンドを生成して実行します。しかし、それによるとこの問題、エイリアスはパラメータを受け入れることができないため、代わりに関数を使用する必要があります。通常は、コマンドと同じ名前の関数があるという考えが間違っているようで、そこで停止します。理由は言えませんが。

ついにそのような関数を作成しようとしたとき、このような気がしました。これはコマンドのデフォルトフラグを設定したい私にとって一般的なパターンです。もっと簡単な方法はありませんか?おそらくzshはこの問題に対するより良い解決策を提供できますか?

これは私に別の考えをさせます:既存のコマンドをオーバーライドするのはアンチパターンですか?私はいつもそうします。なぜなら、頭の中にある関連性をスキップできるからです。たとえば、「なぜllページがないのですかmanllls -laman lsman ll

結論として:

  1. 書き直しても大丈夫ですか?既存のコマンドエイリアス/関数はありますか?
  2. zshまたは他のツールは、特定のコマンドのデフォルトフラグを設定するより直接的な方法を提供しますか?

答え1

私はあなたが言及した他の記事が非常に誤解を招く可能性があるのでとても驚きました。エイリアスではないから使用パラメーターは、別名が不可能であることを意味しません。置くパラメータ。もちろん、エイリアスにオプションを入れることもできますが、これは限られているので、エイリアスは1つの場所で置き換えられます。

$ alias ls='ls -l'
$ ls 
# will run: ls -l
$ ls foo
# will run: ls -l foo

他の質問からの質問は、パラメータを持つエイリアスにオプションを追加したい場合です。

したがって、エイリアスがある場合:

$ alias movetotrash='mv  ~/Trash'
# no way to use inject anything inside 'mv' and '~/Trash'

だからあなたの場合

$ alias locate='locate -i -A'
# will expand to 'locate -i -A' and then whatever else you type.

あなたの具体的な質問について:

Linuxディストリビューションでは、エイリアスを介して基本的な「オプション」を提供することが非常に一般的です。たとえば、lsalias ls 'ls --color=auto'またはrootログインのオプションがあることがよくありますalias mv 'mv -i'。したがって、これはユーザーにより良いデフォルト値を提供し、デフォルトのバイナリと同じ名前を使用する標準的な方法と見なすことができます。ユーザーがエイリアスを使用したくなく標準環境に設定されている場合は、una​​liasを使用してエイリアスを永久にオフにしたり、バックスラッシュを使用してコマンドを実行したりできます(たとえば、その\mv a b実行を防ぐエイリアスの拡張など)。パスが使用されます。例 /usr/bin/mv a b

私はzshがこの領域で追加機能を提供するとは信じておらず、確かに「標準」はありません。人々はしばしばラッパーシェルスクリプトを作成し、時にはシェル関数を作成します。しかし、一般的なソフトウェアの場合、エイリアスは一般に人々が使用するソリューションです。プログラムが十分に複雑な場合、通常は一般ユーザーの好みに合ったrcファイルを取得します。

poptライブラリは、ユーザーが独自のソフトウェアオプションを作成できるようにすることで、簡単にオプションを作成したいツールだと思います。しかし、poptライブラリは広く使われておらず、デフォルト値を設定する機能もないようです。

答え2

同じ名前のエイリアスを使用することは、エイリアスの割り当ての中心です。

An alias definition provides a string value that shall replace a command name when it is encountered

alias grep='grep --ignore-case --color=auto'完璧な代替品として使用できますgrep

コマンドを置き換えるための関数またはスクリプトを~/bin/生成するには、そのコマンドを直接参照する必要があります。

function grep {
    grep --ignore-case --color=auto "${@}"
}

または

~/bin/grep:

grep --ignore-case --color=auto "${@}"

...関数やスクリプトが自分自身を無限に呼び出す再帰ループにロックされています。

function grep {
    /bin/grep --ignore-case --color=auto "${@}"
}

または

~/bin/grep:

/bin/grep --ignore-case --color=auto "${@}"

...自分を呼び出さないので、再帰のため死ぬことはありません。

エイリアスの唯一の問題は、「デフォルト」パラメータの間に内部的にパラメータを挿入できないことです。関数とスクリプトを使用できます。

function grep {
    /bin/grep ${1} --ignore-case --color=auto ${2} 
}

または

~/bin/grep:

/bin/grep ${1} --ignore-case --color=auto ${2}

...しかし、一般的な引数順序を必要とする最新バージョンのコマンドを使用しようとすると、非常に速く混乱します。

関連情報