スクリプトで関数を使用する

スクリプトで関数を使用する

linge.sh私の使用から.bashrc呼び出すbashスクリプトがあります。

source ${HOME}/Opstk/bin/linge/linge.sh

linge.sh次に、bashファイルを呼び出してオプションで有効になったアドインを含めたいと思います。

${HOME}/Opstk/bin/linge/edvart/edvart.sh

ただ使用

source ${HOME}/Opstk/bin/linge/edvart/edvart.sh

存在する

${HOME}/Opstk/bin/linge/linge.sh

ユーザーが端末を起動するたびに関数呼び出しを使用できるようにしたいです。

関数は次のように定義されます。

linge-environ-texinfo
{
 ...
}
export -f linge-environ-texinfo

端末にいるときに好きなように関数を呼び出したいです。

linge-environ-texinfo -opt1 --opt2=val param1 param2

ベストアンサー1

ファイルにアクセスすると、source現在シェルのファイルにあるコマンドを実行します。これは本質的に、ファイルの内容を端末に直接1行ずつ入力することと変わりません。あなたのファイルにも同じことが当てはまります.bashrc。インポートすると現在のシェルからすべてのコマンドを実行し、別のファイルをインポートすると現在のシェルでも実行されます。調達ファイルは、さまざまな部分を複数のモジュールに分割して.bashrc何かを調整するたびに巨大なファイルを見る必要がないようにするためのきちんとした方法です。

export一方、エクスポートされたシェルで実行されたコマンドに指定された名前/変数を指定します。たとえば、FOO=bar変数をエクスポートせずにシェルで変数を定義し、そのスクリプトのFOOコンテキストで変数が「bar」に等しいと予想してスクリプトを実行する場合は、誤った操作を実行します。追加のコンテキストがサブシェルを実行するためのスクリプトがまだ提供されていないため、そこから設定が解除FOOされます。この問題は、その名前を指定し、スクリプトによって生成されたexportすべてのプロセス(スクリプトを含む)に対してその名前を指定された値(提供されている場合)に設定するようにシェルに指示することによって解決されます。

したがって、元の質問に対して - 新しいシェルを実行するとすぐに使用できる機能を定義する場合は、必要に応じてその機能を含む.bashrcファイルをインポートすることをお勧めします。同様に、一部の機能セットをその機能を使用したい他のファイルに効果的にインポートしたい場合は、その機能を使用したいファイルにその機能を含むファイルをインポートするだけです。これが必要な唯一のexportケースは、定義した名前にアクセスする必要があるいくつかのサブプロセスを実行することです。

しかし、今後このような問題が発生した場合は、まず確認することを忘れないでください。helpそうでなければ、man長期的に多くの問題を減らすことができます。

おすすめ記事