上記のトピックが以前に議論されたことがわかっています。
source
.shファイル、shファイルを使用した後に環境変数を保持する- そして、
./
.shファイルが完了すると、環境変数が失われます。
ただし、次のスクリプトがあります。makefile.sh
#!/bin/sh
echo $(pwd)
export PATH=$PATH:$PWD
## source the environment
source environment-setup
上記のファイルを使用すると、source
PATHをエクスポートしなくても正常に完了します。しかし、./
上記のファイルを使用すると./makefile.sh: 7: ./makefile.sh: source: not found
。
environment-setup
に関連してこれを入れました。makefile.sh
もっとやるべきことはありますか?それともsource
`./ の微妙な違いがありませんか?
挨拶
ベストアンサー1
Shebangの結果として代わりを#!/bin/sh
使用しています。sh
bash
source
はシェル組み込みですが、bash
ソーシングするスクリプトには該当せず、環境には存在しないため、スクリプトを実行するとエラーが発生します。sh
source
./
問題を解決する方法は2つあります。
shebangを変更すると、システムに利用可能なシェルがあり、そこにあることがわかります
#!/bin/bash
。bash
/bin
最後の行を次に変更します。
. environment-setup
.
source
insh
とin、他のシェルとbash
同じ機能を持っています。environment-source
ファイルが実行中のスクリプトの現在の作業ディレクトリにない場合は、ファイルの絶対パスを使用して、その時点のcwdが何であるかに関係なく動作することをお勧めします。
. /path/to/environment-setup