コマンドに応答し続けるには、シェルスクリプトにyとnをどのように提供しますか?

コマンドに応答し続けるには、シェルスクリプトにyとnをどのように提供しますか?

サンプルスクリプトがあり、一度に1つだけ実行したいです。応答を実行するためにシェルスクリプトにコマンドライン入力をどのように提供しますか?また、スクリプトを変更することはできません。以下のコードは「ls」コマンドのみを実行しようとしています。

have tried below command to execute, but it took 'yes' for both

yes yes no | bash test.sh

e.g:
while true; do
  read -p "Would you like to run ls command? (y/n)" response
  case $response in
    [Yy]* ) ls; break;;
    [Nn]* ) break;;
    * ) echo; echo "Please answer yes or no.";;
  esac
done

while true; do
  read -p "Would you like to run PWD command? (y/n)" response
  case $response in
    [Yy]* ) pwd; break;;
    [Nn]* ) break;;
    * ) echo; echo "Please answer yes or no.";;
  esac
done

誰でも解決策を提案できますか?

ベストアンサー1

説明からyes

指定されたすべての文字列または「y」を含む行を繰り返し出力します。

したがって、yes yes no出力は次のようになります。

yes no
yes no
yes no
...

しかし、あなたは欲しい

yes
no

文字列に改行を追加してみることができます。

yes 'yes
no' | bash test.sh

あるいは、何度も何度も必要とせず、一度だけ必要なので、スクリプトに手動で提供することもできます。

printf '%s\n%s\n' yes no | bash test.sh

おすすめ記事