web-dev-qa-db-ja.com

パイプの後で.bashrcで定義されたエイリアスが機能しない

私は次の問題で立ち往生しています。

.bashrc(および.bash_profile)でエイリアスを定義しました:

alias echo2="echo"

これはうまく機能します:

$ echo2 "test"
test

ただし、リダイレクト後に使用しようとすると、機能しません。

ls | awk '{print "echo2 "$1}' | bash
bash: line 1: echo2: command not found
bash: line 2: echo2: command not found
...

誰かが理由を知っていますか?どうすればそれを機能させることができますか?

3
Eino Gourdin

入力として新しいbashプロセスにパイプします。ただし、このプロセスでは初期化スクリプトが読み込まれないため、エイリアスは定義されていません。

man bashのセクション[〜#〜] invocation [〜#〜]を確認してください:エイリアスを定義したファイルに応じて、bashを作成する必要がありますログインシェル(-l)またはインタラクティブ(-i)のいずれかを処理して、そのファイルをロードします。

追加の制限があります。シェルが対話型でない場合、エイリアスは無視されます。ただし、回避策があります。

   Aliases  are not expanded when the Shell is not interactive, unless the
   expand_aliases Shell option is set using shopt (see the description  of
   shopt under Shell BUILTIN COMMANDS below).

または、エイリアスの代わりにシェルfunctionsを使用することを検討することもできます。

5
Daniel Beck