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)特定の条件では、ラインバッファリングの問題がある可能性があります。
しかし、少なくとも私のテストシナリオでは動作します。