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

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

Bashスクリプトの場合、パラメータにアクセスするために使用できます"$@"。エイリアスを使用する場合、同等のものは何ですか?

答え1

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

関数自体を使用することに本当に反対している場合は、次のようになります。

$ alias wrap_args='f(){ echo before "$@" after;  unset -f f; }; f'
$ wrap_args x y z
before x y z after

最初のパラメータのみが必要な場合$@に置き換えることができます。$1

説明する

これにより一時関数が生成され、fパラメータが渡されます。

Aliasパラメータは最後にのみ渡されます。fエイリアスの最後で呼び出されることに注意してください。

unset -f関数定義はエイリアスの実行時に削除されるため、実行後も停止しません。

答え2

エイリアスは、すべての引数がエイリアスを付けたプログラムに引数として渡されるという点で、コマンドと同じです。たとえば、

alias ls='ls -l -a -t -r'
# This now executes 'ls -l -a -t -r foo bar'
ls 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 "$@"
}

答え3

現在の回答に加えて、エイリアスの仕組みについて知っておくべき重要な点は、エイリアスコマンドの後に入力するすべての引数が文字通り最後に使用されることです。したがって、引数が最初のコマンドとして解釈される必要がある2つのコマンド(パイプラインかどうか)にエイリアスを使用することはできません。明確にするために期待どおりに機能しない例は次のとおりです。

alias lsswp="ls -l | grep swp"

(次からインスピレーションを得た例この問題ls -l)これは常に実行された出力を使用します。現在のディレクトリとgrep - だからそれを使用してください

lsswp /tmp/

ls -l | grep swp /tmp/ と同等だろういいえ ls -l /tmp/ | grep swp

パラメータを中間のどこかに使用する必要があるすべての目的には、次のものを使用する必要があります。機能エイリアスではなく。

答え4

私は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

関連情報