
ファイルtmp.sh
には次の内容が含まれます。
func() {
ls
}
ファイルが を使用してソース化されている場合source tmp.sh
、関数はfunc
正常に動作します。
ただし、ソースがcat tmp.sh | source /dev/stdin
bash の苦情として行われた場合:
-bash: func3: コマンドが見つかりません
2 つのソース方法の違いは何ですか? の観点からは、もファイル ハンドルであるsource
ため、違いはありません。/dev/stdin
答え1
bash(1)より:パイプライン内の各コマンドは、個別のプロセスとして(つまり、サブシェル内で)実行されます。
メイン シェルはサブシェルの定義にアクセスできません。