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


64

bashスクリプトの場合、"$@"引数にアクセスするために使用できます。エイリアスを使用する場合、同等のものは何ですか?

回答:


50

エイリアスは、コマンドへのすべての引数がエイリアスのプログラムへの引数として渡されるという点でコマンドに似ています。たとえば、にエイリアス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 "$@"
}

3
opengroup.org/onlinepubs/009695399/utilities/…の関数shが定義されていmy_program_wrapper() { ...; }ます。Bashはキーワードを処理しますfunctionが、より移植性の高いものを選択してください。
一時的な

2
@ephemient非常に本当です。誰もがベアボーンPOSIXシェルではなくGNU Bashを使用しているという事実に加えて。
amphetamachine

21

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

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

$ 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 zbash:予期しないトークンの近くの構文エラー `( '
エリプティカルビュー

@Elipticalviewうーん、コピーペーストの問題?bash 4.4.12での作業を確認しました。
トム・ヘイル

1
私がいたfエイリアス。エイリアスを解除fすると、正常に機能します。古い名前の衝突の事。
楕円ビュー

command type f:)
トム・ヘイル

1
すばらしいです!それが最も遅延したバリアントです!
セルギウス

19

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

alias lsswp="ls -l | grep swp"

この質問に触発された例)これは常に現在のディレクトリでls -l実行されたの出力を使用し、その上でgrepを行います-したがって

lsswp / tmp /

等価になるls -l | grep swp /tmp/はありません ls -l /tmp/ | grep swp

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


15

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

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

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


あなたは見てくださいすることができ、私の質問 - ソリューションのどれも私のために働かないと、私は恵みを開始する許可されていないです。
JJD

1
@JJDあなたの質問に答えた人は正しいです。その場合、エイリアスではなく関数が必要です。この質問に対する受け入れられた答えは本質的に同じであるため、質問は正しく終了しました。
ウォーレンヤング

1

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.