私は多くの小さな1〜2行のスクリプトを格納する~/bin
ディレクトリ(mineにあります)を持っています。PATH
それらのいくつかはcd
ディレクトリに行き、ファイルに対してコマンドを実行しますvim
。しかし、私のファイルには.bash_aliases
同じ目的を持つエイリアスがたくさんあります。
Bashスクリプトを作成するかエイリアスを作成するかをどのように決定しますか?どの道を選んでも構いませんか?
答え1
十分に頻繁に使用すると、すべてのシェルにロードする際のオーバーヘッドが発生します。関数で書きましょう。
プロジェクト固有のものであれば、プロジェクトの作業中にシェルにソースとして提供されるエイリアスと関数のセットで作成できます。
独立した方法で動作している場合にのみ、私の〜/ binにスクリプトとして書くことができます。デフォルトでは、エイリアスの一部のライナーがありますが、シェル以外の場所で実行するために使用されます(たとえば、他のプログラムでプロンプトを実行するために使用されます)。ほとんどの場合、かなり実用的なスクリプトでなければなりません。
答え2
通常、シェルスクリプト関数はエイリアスよりも柔軟性が高いため、優先する必要があります。たとえば、エイリアスでは、指定された引数の数、またはその型が予想どおりにあるかどうかをテストすることはできません。私は同意するガレブたとえば、エイリアスは単純なシングルライナーに適しています。alias cp='cp -i'
答え3
単一のコマンドのより複雑な文字列置換には、スクリプトがより適している可能性があります。また、他のスクリプトで使用したり、他の人が使用できるものがすべてスクリプトとして最適です。他の人のbinディレクトリからプログラムを実行するのは良い考えではありませんが、他の人の個人的なエイリアスファイルを取得するよりも優れています。
エイリアスはインタラクティブな環境をパーソナライズするのに最適です。例えば、e='emacs -nw'
等。
答え4
私は最も簡単な方法を使用します。
主にコマンドに引数がない場合は、エイリアスを使用します。
コマンドにパラメータがある場合は、関数を使用してください。
たとえば、make と cd を次のディレクトリに移動します。
md () { [ $# = 1 ] && mkdir -p "$@" && cd "$@" || echo "Error - no directory passed!"; }
コマンドが独自のパラメーターを持つインストール済み関数を使用している場合は、その関数も使用します。
たとえば、gitに-vを追加します。
git () { [ $1 = commit ] && command git commit -v "${@:2}" || command git "$@"; }