質問: ### 前提・実現したいこと zshでシェルスクリプトを`source`コマンドで実行できるかどうか。 ### 発生している問題・エラーメッセージ `source`コマンドでも`./`でもシェルスクリプトは実行できるはずだが、`source`コマンドの場合はなぜかエラーになる。 `./`だと問題なく動作する。不思議でたまらないので誰か理由と解決方法を教えてください。 ``` read:5: -p: no coprocess ``` ### 該当のソースコード ``` #!/usr/local/bin/bash read -p "Please input your working directory: " WDIR ``` ### 補足情報(FW/ツールのバージョンなど) macOS Mojave バージョン10.14.2 zsh5.5.1
回答: `source`コマンドは使用中のシェルでそのファイルの中身を実行します。zshを使っているということなので、実行するのはzshです。 `./`の場合は外部コマンドとして実行されます。そのファイルの冒頭の`#!`行で使用するインタプリターが指定されていればそれが使われます。冒頭に`#!/usr/local/bin/bash`と書いてありますからそれはbashで実行されます。 そしてbashとzshでは`read`の`-p`オプションの意味が違います。bashではプロンプトを出すというオプションなのですが、zshではcoprocessから入力するという意味になります。従って上記のようなエラーになります。