GNU/Linux >> Linux の 問題 >  >> Linux

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

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

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

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

#!/bin/bash

for file in "[email protected]"
    do
    commandA $file
    commandB $file
done

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

何が間違っているのですか?

承認された回答:

まず第一に、ddeimekeが言ったように、エイリアスはデフォルトでは非対話型シェルでは展開されません。

次に、.bashrc BASH_ENVを設定しない限り、非対話型シェルによって読み取られません。 環境変数。

しかし、最も重要なのは、そうしないことです。お願いします?ある日、そのスクリプトを必要なエイリアスが設定されていない場所に移動すると、再び壊れます。

代わりに、スクリプトのショートカットとして変数を設定して使用してください:

#!/bin/bash

CMDA=/path/to/gizmo
CMDB=/path/to/huzzah.sh

for file in "[email protected]"
do
    $CMDA "$file"
    $CMDB "$file"
done

Linux
  1. Bashスクリプトをファイルに接続できますか?

  2. Bash翻訳ファイルにすべてのエラーテキストが含まれていないのはなぜですか?

  3. Ls -lがすべてのファイルの時間や年を表示しないのはなぜですか?

  1. Bashスクリプトでスペースをエスケープできないのはなぜですか?

  2. Bash スクリプトのスクリプト ファイル名を知るにはどうすればよいですか?

  3. Bash スクリプト:不適切なインタープリター

  1. Linux用の10個の便利なBashエイリアス

  2. このファイルを「検索」しないのはなぜですか?

  3. フォルダーから最も古いファイルを削除する Bash スクリプト