web-dev-qa-db-ja.com

パラメータをエイリアスに渡す方法は?

Bashスクリプトの場合、"$@"を使用して引数にアクセスできます。エイリアスを使用する場合、何に相当しますか?

77
prosseek

エイリアスはコマンドに似ており、エイリアスはすべて、それらがエイリアスするプログラムに引数として渡されます。たとえば、lsls -laにエイリアスする場合、ls foo barと入力すると、コマンドラインでreally execute 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 "$@"
}
54
amphetamachine

エイリアスソリューション

関数自体を使用することに本当に反対の場合は、以下を使用できます。

$ 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は、エイリアスが実行されるときに関数定義を削除するため、後でハングすることはありません。

34
Tom Hale

現在の回答に加えて、エイリアスがどのように機能するかを理解するために重要なことは、エイリアスコマンドの後に入力するすべてのパラメーターが文字どおり最後に使用されることです。したがって、2つのコマンド(パイプされているかどうかに関係なく)にエイリアスを使用する方法はありません。最初のコマンドはパラメーターを解釈します。明確にするために、期待どおりに機能しない例を次に示します。

alias lsswp="ls -l | grep swp"

this question に触発された例)これは常にcurrentディレクトリで実行されたls -lの出力を使用し、その上でgrepを実行します-そう使用する

lsswp/tmp /

ls -l | grep swp /tmp/と同等であり、notls -l /tmp/ | grep swpと同等です。

引数を途中で使用するすべての目的で、functionの代わりにaliasを使用する必要があります。

19
rozcietrzewiacz

実際には何もする必要はありません。エイリアスはこれを自動的に行います。例えば:

$ alias less="less -eirqM"
$ less foo.txt

Foo.txtの最初のページが表示され、lessはEOF(-e)で終了し、検索では大文字と小文字が区別されません(-i)など)。

15
Warren Young

私は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にしたことになります。

1
stevica