10 個の異なる単語に対して複数のファイルを収集するスクリプトの作成中に、この問題が発生しました。
私が作成したスクリプトは(縮小)
#!bin/bash
alias grep='grep -n'
out=`grep word $1`
出力
some text word
some other text word more text
grepは機能しますが、エイリアスは考慮しません。行番号の代わりに一致する行のみを出力します(-n
行番号の場合)。
これで、次のコマンドを実行すると正常に動作します。
#!bin/bash
out=`grep -n word $1`
上記のスクリプトの出力と期待される出力:
233: some text word
532: some other text word more text
スクリプトのさまざまな場所にgrepステートメントがあり、すべての行を編集する必要はありません。エイリアスでgrepを一度オーバーライドしたいのですが、うまくいかないようです。
ここで何が間違っている可能性がありますか?エイリアスを機能させるにはどうすればよいですか?
答え1
次の行を忘れました。
shopt -s expand_aliases
例えば
#!/bin/bash
shopt -s expand_aliases
alias grep='grep -n'
out=$(grep word "$1")
echo "$out"
答え2
問題は、実際のシェルのエイリアスを作成したことです。バックティック(または)を使用すると、$(...)
実行しているサブシェルでエイリアスが無視されます(わかっている限り、エイリアスはエクスポートできないため、サブシェルでオーバーライドする必要があります)。
あなたの場合、おそらく最良の方法は、コマンドを含む変数を設定することです。説明する:
MY_GREP="grep -n"
out=`${MY_GREP} word $1`