web-dev-qa-db-ja.com

引数が途中にあるエイリアスを作成するにはどうすればよいですか?

引数が最後に追加されるのではなく、中央に挿入されるエイリアスを定義しようとしています。

私はそれを次のように定義してみました:

alias grep_logs="grep $1 */log/*.log"

ここで、$ 1はgrep_logsの最初の引数であり、次のようになります。

grep_logs foo

次のコマンドを実行します。

grep foo */log/*.log

ただし、代わりに次のコマンドを実行します。

grep foo */log/*.log foo

その結果、エラーが発生します。

grep: foo: No such file or directory

エイリアスを使用してこれを行うことは可能ですか、それとも関数を定義する必要がありますか?

33
sferik

〜/ .profileで関数を定義してみてください。

function greplogs(){
    grep "$1" */logs/*.log
}
35
Jack

質問に答えるためだけに、関数ソリューションははるかにクリーンですが:

alias sstatus='bash -xc '\''Sudo service $0 status'\'''
alias sstart='bash -xc '\''Sudo service $0 start'\'''
alias sstop='bash -xc '\''Sudo service $0 stop'\'''


$sstatus cups
+ Sudo service cups status
Status of Common Unix Printing System: cupsd is running.
15
ealfonso

問題は、エイリアスが位置パラメータの概念をサポートしていないことです。もしそうなら、関数は必要ありません。そうです、関数はまさにこの目的のために作られているので、関数を使用してください。

2
Jens

探している答えは完全ではありませんが、最初の引数としてパターンを指定したくない場合は、-e引数を使用してください

alias grep_logs="grep */log/*.log -e"
2
Dunes

関数を使用して、エイリアスを作成してみてください。

function func_grep_logs {
    grep $1 */log/*.log
}

その後

alias grep_logs="func_grep_logs"
1
Femi