以下を行うことは可能ですか?
次を実行したい:
mongodb bin/mongod
私のbash_profileには
alias = "./path/to/mongodb/$1"
エイリアスは、それが表す文字列に展開されます。エイリアスの後にあるものはすべて、展開後に表示されます。明示的な引数として渡す必要はありません(例:$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
通常、Bashのエイリアスに引数を渡したい場合、エイリアスと次のような関数の組み合わせを使用します。たとえば、
function __t2d {
if [ "$1x" != 'x' ]; then
date -d "@$1"
fi
}
alias t2d='__t2d'
エイリアスでパラメーターを使用するには、このメソッドを使用します:
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のマンページで、関数が提供できる機能については、補完、トラップ、バインドなどを参照してください)。
私はそれがあなたを助けることを願っています:)
これは、関数の使用を回避できる解決策です。
alias addone='{ num=$(cat -); echo "input: $num"; echo "result:$(($num+1))"; }<<<'
テスト結果
addone 200
input: 200
result:201
csh(bashとは対照的に)では、正確に何をすることができます欲しいです。
alias print 'lpr \!^ -Pps5'
print memo.txt
表記\!^
により、この時点でコマンドに引数が挿入されます。
!
文字の前に\
が付いているのは、履歴コマンドとして解釈されないようにするためです。
複数の引数を渡すこともできます:
alias print 'lpr \!* -Pps5'
print part1.ps glossary.ps figure.ps