私のBashスクリプトがエイリアスを認識しないのはなぜですか?

私のBashスクリプトがエイリアスを認識しないのはなぜですか?

私の~/.bashrcファイルには2つの定義があります。

  1. commandA、これは長いパスのエイリアスです。
  2. commandB、これはBashスクリプトのエイリアスです。

これら2つのコマンドを使用して同じファイルを処理したいので、次のBashスクリプトを作成しました。


#!/bin/bash

for file in "$@"
    do
    commandA $file
    commandB $file
done

セッションからログアウトして再ログインした後もcommand not foundこのスクリプトを実行すると、Bashは両方のコマンドに対してエラーメッセージを表示します。

私は何が間違っていましたか?

ベストアンサー1

bashのマンページを見ると、次のようになります。

シェルが非対話型の場合、Shoptを使用してExpand_aliasesシェルオプションを設定しない限り、エイリアスは拡張されません(以下のSHELL BUILTIN COMMANDSの下のshoptの説明を参照)。

だから

shopt -s expand_aliases

あなたのスクリプトから。

エイリアスファイルをスクリプトで設定してからインポートする必要があります。

shopt -s expand_aliases
source ~/.bash_aliases

おすすめ記事