Bashスクリプトの「予想」と同様の動作

Bashスクリプトの「予想」と同様の動作

parent.sh入力パラメータに基づいて別のスクリプトを呼び出すスクリプト(名前を指定します)があります。

最後にスクリプトを呼び出しますchild.sh
child.sh一部のファイルがすでに存在することが確認された場合は、ユーザー入力を要求します。

"Would you like to replace the configuration file with a new one? (Yes/No/Abort): "

今やりたいことは、キーストロークをシミュレートすることです。「はい」/「y」parent.shファイルを常に上書きするようにスクリプト内に保存します。

できない使用expect

どうすればいいですか?

答え1

yes | child.shたとえ従業員child.sh言及されているのは、プログラマーの観点から見ると有効なソリューションであり、このユースケースを処理できるように努力します。

たとえば、--forceメッセージを表示せずに常にファイルを上書きするオプションを追加します。

しかし、質問のトピックに答えてパイプを通って点火するのではなく、次のことを得るには、次の手順をexpect実行しますy

#!/bin/bash

fifo=fifo

mkfifo ${fifo}

exec 3<> ${fifo}

expect="Would you like to replace the configuration file with a new one? (Yes/No/Abort): "
answer="y"

while IFS= read -d $'\0' -n 1 a ; do
    str+="${a}"

    if [ "${str}" = "${expect}" ] ; then
        echo "!!! found: ${str}"
        echo ">>> sending answer: ${answer}"
        echo "${answer}" >&3
        unset str
    fi

    if [ "$a" = $'\n' ] ; then
        echo -n "--- discarding input line: ${str}"
        unset str
    fi
done < <(./child.sh <${fifo})

rm ${fifo}

実際には安全ではないか、特定の問題を解決するためにテストされていません。 8)特定の条件では、ラインバッファリングの問題がある可能性があります。

しかし、少なくとも私のテストシナリオでは動作します。

関連情報