HP-UXサーバーへのソフトウェアのインストールをスクリプト化しています。スクリプトが開始すると、インストールパスを入力するプロンプトが表示されます。実行を継続できるように、スクリプトへのパスを渡す必要があります。この必要性が存在するスクリプト内の場所は1つだけです。
スクリプトからのプロンプトは次のとおりです。デフォルトパスの場合はEnterキーを押すか、ソフトウェアをインストールするパスを入力してください
デフォルトのパスを使用したくないので、新しいパスを入力する必要があります。しかし、このスクリプトはバックグラウンドで実行されるため、パスを指定する必要があります。スクリプト形式での正確な応答がわかりません。
パイプを使用して、スクリプトの標準入力に回答をエコーできます。
echo "My/Path/not/default"| yourscript.sh
スクリプトの開始時にすべての入力を提供できる場合は、 リダイレクト プログラムの入力によって提供します。つまり、/path/to/installer
を実行する代わりに、
{ echo '/the/path/where/to/install';
echo 'answer to the second Prompt';
} | /path/to/installer
または hereドキュメントを使用します :
/path/to/installer <<'EOF'
/the/path/where/to/install
answer to the second Prompt
EOF
時々プログラムと対話したいが、その間に端末を他のものに使用したい場合は、 Screen や tmux などの ターミナルマルチプレクサー でプログラムを実行します。 screenで、screen
を実行してセッションを開始し、プログラムを開始します。他のことをするには、 Ctrl+A、 c 2番目のウィンドウを作成し、 Ctrl+A、 n ウィンドウ間を移動します。画面を終了してプログラムを実行したままにするには、を押します Ctrl+A、 d (「デタッチ」)。既存のScreenセッションに戻るには、screen -rd
を実行します(screen
オプションなしで新しいセッションを開始します)。
自動回答を提供するには、次のいずれかを使用できます。
insaller.sh < an_input_file
または
command-line | installer.sh
以下の例のように、installer.sh
スクリプトがread -p
を使用している場合は、注意する点があります。
read -p "Press ENTER for default path or enter path to install software:" answer
man bash
は、標準入力が端末でない場合は何も出力しないことを指定します。
これがあなたの状況であるなら、あなたはこの奇妙なことを試すことができます:
( sleep 30 ; printf "/my/own/path\n" ) | insaller.sh
秒数(上記の例では30
)を状況に合わせる必要があります。
read -p
未使用がインストールスクリプト内で発生する場合は、このGNU
ソリューションを試してみます。
tempdir="$(mktemp -d)"
mkfifo "${tempdir}"/input
touch "${tempdir}"/output.log
./installer.sh <"${tempdir}"/input >"${tempdir}"/output.log 2>&1 &
installerpid=$!
tail --pid=$installerpid -fn 1 "${tempdir}"/output.log | ( fgrep -q "Press ENTER for default path or enter path to install software:"; printf "/new/path\n" ) >> "${tempdir}"/input &
# ... do stuff
# before ending the script, just wait that all background processes stop
wait
rm -f "${tempdir}"/input "${tempdir}"/output.log
アイデアは、2つのバックグラウンドコマンドラインを使用することです。1つはインストールスクリプト用で、もう1つはプロンプトを待って回答を提供するためです。
名前付きパイプ(input
)と通常のファイル(output.log
)が通信に使用されます。
tail --pid=$installerpid -fn 1 "${tempdir}"/output.log
は、output.log
ファイルに書き込まれているとおりの行を出力します。インストーラスクリプトが終了すると終了します。
( fgrep -q ... ; printf .. ) >> ...input
:プロンプトが見つかるまでブロックし、インストールスクリプトへの新しいパスを提供します。