別のスクリプトでエイリアス(ksh)を使用する

別のスクリプトでエイリアス(ksh)を使用する

スクリプトを作成していますが、kshファイルとスクリプト.profileでエイリアスとして定義されたコマンドを使用したいと思います。スクリプトを含むフォルダでこのコマンドを試しましたが、正常に動作しました。しかし、私のスクリプトでは次のようになります[command] not found

この問題をどのように解決できますか?私のコマンドはlsリポジトリを作成した後、スクリプトで次のことを行います。

[command]| grep ... | { IFS== read -r var1 x && IFS== read -r var2 x; }

ベストアンサー1

スクリプトにエイリアスを使用しないでください。まさにこんな理由で悪い考えです。この問題を解決する方法はいくつかあります。

  • スクリプト自体でエイリアスを定義します。
  • スクリプトからエイリアスを含むファイルをインポートします。次の行を追加してください。

    . /home/your_user/.profile
    
  • 別名の代わりにコマンド自体を使用してください。たとえば、1つがある場合は、alias foo="echo bar"スクリプトecho barで代わりに使用しますfoo

一般的にエイリアスを設定することはお勧めできません.profile。このファイルは、対話型シェルやスクリプト実行時ではなく、ログインシェルからのみ読み取ることができます。エイリアスにアクセスできるようにするには、エイリアスをに追加する必要があります$HOME/.kshrcman ksh

exec(2) がシェルを呼び出し、引数 0 の最初の文字 ($0) が - の場合、シェルはログインシェルとみなされ、コマンドは /etc/profile から読み取られ、.profile 読み取りコマンドのすべてのファイルから読み取られます。現在のディレクトリまたは $HOME/.profile ファイルが存在する場合。次に、対話型シェルの場合、ファイルが存在する場合は、パラメーター拡張、コマンド置換、および環境変数ENV値の算術置換を実行して、指定されたファイルからコマンドを読み取ります。

/etc/profileつまり、ログインシェルは変数内のすべてを読み取り、.profile対話型シェル(ターミナルを開くときに取得するもの)は、変数内のすべてを$ENV読み取るか、変数が定義されていない場合にのみ~/.kshrc意味します。.profileエイリアスは、コンピュータに入るかログインシェルを起動するまで読み込まれません。

おすすめ記事