私はread
コマンドを使用してコマンドに対話的に引数を読み込むbashスクリプトを持っています。たとえば、yes/noオプションです。デフォルトのオプション値を引数として渡す非対話型スクリプトでこのスクリプトを呼び出す方法はありますか?インタラクティブでないプログラムに対話的に引数を渡す
私は対話型スクリプトに渡す必要があるのは1つのオプションだけではありません。
私はread
コマンドを使用してコマンドに対話的に引数を読み込むbashスクリプトを持っています。たとえば、yes/noオプションです。デフォルトのオプション値を引数として渡す非対話型スクリプトでこのスクリプトを呼び出す方法はありますか?インタラクティブでないプログラムに対話的に引数を渡す
私は対話型スクリプトに渡す必要があるのは1つのオプションだけではありません。
を使用
your_program << ANSWERS
yes
no
maybe
ANSWERS
(これは非常に読みやすいことができる)here documentを使用複雑なタスクはexpect
(http://en.wikipedia.org/wiki/Expect)です。 これは基本的にユーザをシミュレートし、特定のプログラム出力や関連するものにどのように反応するかをスクリプトで記述することができます。
これは、パスワードの配管を禁止するssh
などの場合にも機能します。
... SSHの場合の適切な解決方法は、公開鍵認証に切り替えることです。 – tripleee
あなたはファイル内のデータを置くことができ、このようにそれを再指揮:
$ cat data.txt
2
3
スクリプトの実行::
$ file.sh < data.txt
2
3
をスクリプトの
$ cat file.sh
#!/bin/bash
read x
read y
echo $x
echo $y
データ多くの方法
パイプy私たちの入力
echo "yes
no
maybe" | your_program
ファイルから
your_program < answers.txt
をリダイレクト
MORについてはhere string
your_program <<< $'yes\nno\nmaybe\n'
これは、プログラムが標準入力を読み取る場合にのみ動作することを指摘しています。いくつかのプログラムは途中で読み込みに失敗します。標準入力がパイプの場合でも、対話形式でパスワードを入力できます。パスワードの場合、これはセキュリティの理由から意味があります。いくつかのインタラクティブなプログラムは単に設計が不十分です。 – tripleee
@tripleeeあなたが言ったことの行に沿って、スクリプトはstdinの影響を受けないパスワードをどのように読み取るのですか?私はあなたがstdinをつかむために 'read'を使うことができるのを知っています。その場合 – flow2k
は、あなたがと対話しようとしているプログラムは、(例えばsshpass、ssh-agentの)それに入力を送ったり、スクリプトへの期待の相互作用を使用するための特別な方法を持っているかどうかを確認する必要があります。 –
ちょうどもう1つ追加するだけです。それは他の場所で見つけられ、とてもシンプルです。 コマンド "execute_command"のコマンドラインですべてのプロンプトに対してyesを渡したいとします。
yes | execute_command
これはすべてのyes/noプロンプトに対する答えとしてyesを使用します。
それは、あなたの入力にパイプ標準入力から –
の可能性が読んでいる場合は、この質問には、多くの重複を取得するとして、対話型プログラムが書かれている言語では問題ないことを指摘する価値があります。これは、標準入力、Erlangアプリケーションなどを読み込むCプログラムです。コマンドラインから実行され、対話的な入力を不快に要求するものがあり、それを自動化したいと考えています。 – tripleee