回答:
エイリアスは、コマンドへのすべての引数がエイリアスのプログラムへの引数として渡されるという点でコマンドに似ています。たとえば、にエイリアスls
を作成するls -la
場合、入力ls foo bar
すると実際ls -la foo bar
にコマンドラインで実行されます。
引数の解釈方法を実際に制御したい場合は、次のような関数を作成できます。
my_program_wrapper() {
local first_arg="$1" \
second_arg="$2"
shift 2 # get rid of the first two arguments
# ...
/path/to/my_program "$@"
}
エイリアスソリューション
関数自体の使用に本当に反対する場合は、次を使用できます。
$ alias wrap_args='f(){ echo before "$@" after; unset -f f; }; f'
$ wrap_args x y z
before x y z after
最初の引数のみが必要な場合は、$@
と置き換えることができ$1
ます。
説明
これによりf
、引数が渡される一時関数が作成されます。
エイリアス引数は最後にのみ渡されます。f
は、エイリアスの最後で呼び出されることに注意してください。
unset -f
それがその後の周りにハングアップしないようにエイリアスが実行されると、関数定義を削除します。
wrap_args x y z
bash:予期しないトークンの近くの構文エラー `( '
f
エイリアス。エイリアスを解除f
すると、正常に機能します。古い名前の衝突の事。
command type f
:)
現在の答えに加えて、エイリアスがどのように機能するかを理解するための重要なことは、エイリアスコマンドの後に入力するすべてのパラメーターが文字通り最後に使用されることです。そのため、2つのコマンド(パイピングされているかどうかに関係なく)のエイリアスを使用する方法はありません。明確にするために、期待どおりに機能しないものの例を次に示します。
alias lsswp="ls -l | grep swp"
(この質問に触発された例)これは常に現在のディレクトリでls -l
実行されたの出力を使用し、その上でgrepを行います-したがって
lsswp / tmp /
等価になるls -l | grep swp /tmp/
とはありません ls -l /tmp/ | grep swp
。
引数を中央のどこかで使用する必要があるすべての目的で、のfunction
代わりにを使用する必要がありますalias
。
実際には何もする必要はありません。エイリアスはこれを自動的に行います。例えば:
$ alias less="less -eirqM"
$ less foo.txt
foo.txtの最初のページが表示され、less
EOF(-e)で終了し、検索では大文字と小文字が区別されません(-i)など。
私はcshに答えています:
はい、エイリアスでパラメータを使用できます。また、上記で述べたこととの違いとして、エイリアスの定義のどこでも、最後だけでなく参照できます。
tar-gz -ingの例:
$ alias tgz "tar cvf - \!:1 | gzip -9 > \!:2.tar.gz"
、ここで!:1
および!:2
は、エイリアスを呼び出すときに指定するパラメーターです。
使用例:
$ ls
clrcf.dat user_comment_2016.06.03_12:51:50.txt user_comment_2016.06.03_12:54:48.txt
TEST-wADM.tec user_comment_2016.06.03_12:52:04.txt user_comment_2016.06.03_12:55:13.txt
$ tgz user* out
a user_comment_2016.06.03_12:51:50.txt 1K
a user_comment_2016.06.03_12:52:04.txt 1K
a user_comment_2016.06.03_12:54:48.txt 1K
a user_comment_2016.06.03_12:55:13.txt 1K
$ ls out*
out.tar.gz
これは事実上、tarコマンドの任意の場所に挿入した2つのパラメーターを使用し、すべてをエイリアスにすることを意味します tgz
sh
が定義されていmy_program_wrapper() { ...; }
ます。Bashはキーワードを処理しますfunction
が、より移植性の高いものを選択してください。