web-dev-qa-db-ja.com

bashのエイリアスに引数を渡す

以下を行うことは可能ですか?

次を実行したい:

mongodb bin/mongod

私のbash_profileには

alias = "./path/to/mongodb/$1"
115
slik

エイリアスは、それが表す文字列に展開されます。エイリアスの後にあるものはすべて、展開後に表示されます。明示的な引数として渡す必要はありません(例:$1)。

$ alias foo='/path/to/bar'
$ foo some args

に展開されます

$ /path/to/bar some args

明示的な引数を使用する場合は、関数を使用する必要があります

$ foo () { /path/to/bar "$@" fixed args; }
$ foo abc 123

あなたがやったかのように実行されます

$ /path/to/bar abc 123 fixed args

エイリアスの定義を解除するには:

unalias foo

関数の定義を解除するには:

unset -f foo

タイプと定義を確認するには(定義された各エイリアス、キーワード、関数、組み込みまたは実行可能ファイル):

type -a foo

または、入力のみ(優先順位が最も高い場合):

type -t foo
214

通常、Bashのエイリアスに引数を渡したい場合、エイリアスと次のような関数の組み合わせを使用します。たとえば、

function __t2d {                                                                
         if [ "$1x" != 'x' ]; then                                              
            date -d "@$1"                                                       
         fi                                                                     
} 

alias t2d='__t2d'                                                               
21
leed25d

エイリアスでパラメーターを使用するには、このメソッドを使用します:

alias myalias='function __myalias() { echo "Hello $*"; unset -f __myalias; }; __myalias'

エイリアスでラップされた自己破壊的な関数なので、両方の世界で最も優れており、定義に余分な行を追加しません...私は嫌いです値は、unsetを呼び出す前に保存する必要があります。次に、その自己破壊関数で「return」キーワードを使用して値を返します。

alias myalias='function __myalias() { echo "Hello $*"; myresult=$?; unset -f __myalias; return $myresult; }; __myalias'

そう..

あなたがそこにその変数を持つ必要がある場合、あなたはできます

alias mongodb='function __mongodb() { ./path/to/mongodb/$1; unset -f __mongodb; }; __mongodb'

もちろん...

alias mongodb='./path/to/mongodb/'

実際にはパラメーターを必要とせずに同じことを行いますが、私が言ったように、何らかの理由でそれらを必要とする場合(たとえば、$ 1ではなく$ 2が必要な場合)、そのようなラッパーを使用する必要があります。 1行よりも大きい場合は、関数が大きくなるにつれて目障りになるため、関数を完全に記述することを検討してください。関数が提供するすべての特典を取得できるため、関数は素晴らしいです(bashのマンページで、関数が提供できる機能については、補完、トラップ、バインドなどを参照してください)。

私はそれがあなたを助けることを願っています:)

19
osirisgothra

これは、関数の使用を回避できる解決策です。

alias addone='{ num=$(cat -); echo "input: $num"; echo "result:$(($num+1))"; }<<<'

テスト結果

addone 200
input: 200
result:201
7
blreay

cshbashとは対照的に)では、正確に何をすることができます欲しいです。

alias print 'lpr \!^ -Pps5'
print memo.txt

表記\!^により、この時点でコマンドに引数が挿入されます。

!文字の前に\が付いているのは、履歴コマンドとして解釈されないようにするためです。

複数の引数を渡すこともできます:

alias print 'lpr \!* -Pps5'
print part1.ps glossary.ps figure.ps

http://unixhelp.ed.ac.uk/Shell/alias_csh2.1.html からの例)

3
jimgug