ソースファイルと./.shファイルの使用の違い

ソースファイルと./.shファイルの使用の違い

上記のトピックが以前に議論されたことがわかっています。

  • source.shファイル、shファイルを使用した後に環境変数を保持する
  • そして、./.shファイルが完了すると、環境変数が失われます。

ただし、次のスクリプトがあります。makefile.sh

#!/bin/sh
echo $(pwd)

export PATH=$PATH:$PWD

## source the environment
source environment-setup

上記のファイルを使用すると、sourcePATHをエクスポートしなくても正常に完了します。しかし、./上記のファイルを使用すると./makefile.sh: 7: ./makefile.sh: source: not found

environment-setupに関連してこれを入れました。makefile.shもっとやるべきことはありますか?それともsource`./ の微妙な違いがありませんか?

挨拶

ベストアンサー1

Shebangの結果として代わりを#!/bin/sh使用しています。shbash

sourceはシェル組み込みですが、bashソーシングするスクリプトには該当せず、環境には存在しないため、スクリプトを実行するとエラーが発生します。shsource./

問題を解決する方法は2つあります。

  1. shebangを変更すると、システムに利用可能なシェルがあり、そこにあることがわかります#!/bin/bashbash/bin

  2. 最後の行を次に変更します。

    . environment-setup
    

.sourceinshとin、他のシェルとbash同じ機能を持っています。environment-sourceファイルが実行中のスクリプトの現在の作業ディレクトリにない場合は、ファイルの絶対パスを使用して、その時点のcwdが何であるかに関係なく動作することをお勧めします。

. /path/to/environment-setup

おすすめ記事