cshのあいまいな入力リダイレクトエラー

cshのあいまいな入力リダイレクトエラー
echo "yes" | my_program < input_file

Ambiguous input redirectcshでエラーが発生しました。この問題を解決するには?

ベストアンサー1

opが残したコメントによっては、my_program質問に対する回答が必要な場合がありますyes|no

expectこれは、オペレータが予想されるマニュアルページで作業に適したツールを使用したいことを意味します。

Expectは、スクリプトに基づいて他のインタラクティブプログラムと「会話」するプログラムです。スクリプトによって、Expectはプログラムが期待できるものと正しい応答が何であるかを知っています。通訳言語は、会話を導くための分岐と高レベルの制御構造を提供します。また、ユーザーは必要に応じて直接制御して対話し、コントロールをスクリプトに返すこともできます。

これで、オペレーティングプログラムのプロンプトが何であるかわかりませんが、次Are you sureから始めるとします。

#!/usr/bin/expect

spawn  bash -c "my_program < /tmp/input"

expect {
     "Are you sure" {
     send "yes"
     }
     eof
}

上記のようにシェルスクリプトを生成し、実行したいコマンドの代わりに実行するだけです。

「プログラム」、「入力ファイル」、「質問」、「あなたの回答」(最後の2つはオプションです。「質問」が表示されない場合は送信されません。になります。)

#!/usr/bin/expect
set arg1 [lindex $argv 0]
set arg2 [lindex $argv 1]
set arg3 [lindex $argv 2]
set arg4 [lindex $argv 3]

spawn  bash -c "$arg1 < $arg2"

expect {
     "$arg3" {
     send "$arg4"
     }
     eof
}

以下を使用してください(上記の内容をにコピーしたとしますmyexp.sh)。

./myexp.sh "my_program" "/tmp/input" "yes"

通常、複数の入力ソースが必要な場合は、ここでドキュメントを使用して並べ替えることができます。

my_program <<EOF
`cat input_file`
yes
EOF

複数入力用の別のオプション:

echo 'yes' >> input_file

または一時ファイルを使用してください。

echo 'yes' > /tmp/myfile$$.txt
cat input_file >> /tmp/myfile$$.txt
my_program < /tmp/myfile$$.txt

それはすべてあなたが達成したいものに依存します。

編集(コメントから):

( echo 'yes'; cat input_file;) | my_program 

また、動作します...ここで文書を見つけました。簡単に読んでください、YMMV。

おすすめ記事