web-dev-qa-db-ja.com

パラメータ付きのbashエイリアス

Cshからbashにスワップしたいので、使用するコマンドで.bashrcを設定する必要があります。エイリアスをパラメータに変換することは、私が信じていたように簡単ではないようです。 csh:

alias gr 'xmgrace -legend load -nxy \!* -free -noask&'

param \!*は、コマンドライン上のすべてのパラメーターを意味します。次に、bashを試しました。

alias gr='xmgrace -legend load -nxy $@ -free -noask&'
alias gr='xmgrace -legend load -nxy $(@) -free -noask&'

しかし、どちらも機能しませんでした。

もう1つの問題は、現在のディレクトリcshを記憶することから生じます。

alias t 'set t=\`pwd\``;echo $t'
alias tt 'cd $t'

いろいろ試してみましたが、結果はありませんでした。

2
leozizos

これはbashエイリアスが機能する方法ではありません。bashエイリアスのすべての定位置パラメーターは、定義した場所ではなく、コマンドの最後に追加されます。それを乗り越えるには、bash関数を使用する必要があります。

例はあなたをより明確にします:

$ cat file.txt 
foo
$ cat bar.txt 
foobar
spamegg
$ grep -f file.txt bar.txt 
foobar

$ alias foo='grep -f "$1" bar.txt'  ## Alias 'foo'
$ foo file.txt 
grep: : No such file or directory

$ spam () { grep -f "$1" bar.txt ;}  ## Function 'spam'
$ spam file.txt 
foobar

エイリアスの最初の引数として見ることができるように、fooが最後に追加されているため、コマンドfoo file.txtは次のように展開されます。

grep -f "" bar.txt file.txt

一方、関数spamの場合、コマンドは次のように正しく展開されます。

grep -f file.txt bar.txt

したがって、あなたの場合、次のような関数を定義できます。

gr () { xmgrace -legend load -nxy "$@" -free -noask & ;}
4
heemayl