Bashのエイリアスに議論を渡す[複製
-
27-09-2019 - |
質問
この質問にはすでに答えがあります:
次のことを行うことは可能ですか:
以下を実行したい:
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を呼び出す前に保存する必要があります。その後、その自己破壊機能の「返品」キーワードを使用して値を返します。
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行よりも大きい場合は、関数が大きくなるにつれて目障りになるため、機能を完全に書くだけであることを検討するかもしれません。関数が与えるすべての特典を取得するため、機能は素晴らしいです(バッシュマンページで、機能が提供できるグッズについては、完成、トラップ、バインドなどを参照)。
私はそれがあなたを助けることを願っています:)
これは、機能の使用を避けることができるソリューションです。
alias addone='{ num=$(cat -); echo "input: $num"; echo "result:$(($num+1))"; }<<<'
テスト結果
addone 200
input: 200
result:201
の CSH (とは対照的に バッシュ)あなたはあなたが望むことを正確に行うことができます。
alias print 'lpr \!^ -Pps5'
print memo.txt
表記 \!^
この時点で、引数がコマンドに挿入されます。
!
文字はaによって先入観があります \
それが歴史コマンドとして解釈されるのを防ぐため。
複数の引数を渡すこともできます。
alias print 'lpr \!* -Pps5'
print part1.ps glossary.ps figure.ps
(例から取られた例 http://unixhelp.ed.ac.uk/shell/alias_csh2.1.html .)
LEED25Dの回答を簡素化するには、エイリアスと関数の組み合わせを使用します。例えば:
function __GetIt {
cp ./path/to/stuff/$* .
}
alias GetIt='__GetIt'