`exec < somefile` は `source somefile` と同じように動作しますか?

`exec < somefile` は `source somefile` と同じように動作しますか?
$ cat somefile 
sleep 100
$ exec < somefile 
$ sleep 100

呼び出しプロセスが完了時に終了することを除いて、exec < somefileと同じように動作しますか?source somefile

ありがとう。

答え1

効果は似ていますが、動作は厳密には同じではありません。

exec < somefileは標準入力を に接続するのでsomefile、シェルは現在接続されている端末ではなく、そのファイルから読み取りを開始します。(少なくとも bash はそうしますが、Zsh は異なる動作をします。) 実質的に、これにより現在のシェルは のsomefile場合と同様に の内容を処理することになりますsource somefile。 を使い果たすとsomefile、シェルは終了します。

関連情報