スクリプトを作成していますが、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/.kshrc
。man ksh
exec(2) がシェルを呼び出し、引数 0 の最初の文字 ($0) が - の場合、シェルはログインシェルとみなされ、コマンドは /etc/profile から読み取られ、.profile 読み取りコマンドのすべてのファイルから読み取られます。現在のディレクトリまたは $HOME/.profile ファイルが存在する場合。次に、対話型シェルの場合、ファイルが存在する場合は、パラメーター拡張、コマンド置換、および環境変数ENV値の算術置換を実行して、指定されたファイルからコマンドを読み取ります。
/etc/profile
つまり、ログインシェルは変数内のすべてを読み取り、.profile
対話型シェル(ターミナルを開くときに取得するもの)は、変数内のすべてを$ENV
読み取るか、変数が定義されていない場合にのみ~/.kshrc
意味します。.profile
エイリアスは、コンピュータに入るかログインシェルを起動するまで読み込まれません。