次の簡単なスクリプトがあるとしますquestion
。
#!/bin/bash
read -rp "What's your name?" ans
echo "Your name is $ans"
cat
私たちの例を試してみましょう
cat question | bash
スクリプトファイルの内容をBashの標準入力に提供し、それをコマンドとして実行します。実行すると、bashの標準入力が使用されるため、パイプの前に配置されていない限り、パイプの外側のものは標準入力に入力できません。
これを軽減するための1つのオプションは、スクリプトファイルの内容をダウンロードして最初にシェルに渡してから実行することです。
bash -c "$(cat ./question)"
私が見つけた構文のもう1つのオプション... | bash
は、スクリプトで現在のプロセスを次のように標準入力が端末からサブシェルにラップされ、リダイレクトされる新しいプロセスに置き換えると機能することです。
#!/bin/bash
(
exec < /dev/tty
read -rp "What's your name?" ans
echo "Your name is $ans"
)
他のオプションが何であるか、ベストプラクティスが何であるかを知りたいです。