HP-UX 서버에 소프트웨어를 설치하기 위한 스크립트를 작성 중입니다. 스크립트가 시작되면 설치 경로를 묻는 메시지가 표시됩니다. 계속 실행할 수 있도록 스크립트에 경로를 전달해야 합니다. 이 요구 사항이 존재하는 스크립트에는 단 한 곳만 있습니다.
스크립트 프롬프트는 다음과 같습니다. 기본 경로를 보려면 Enter 키를 누르거나 소프트웨어를 설치하려면 경로를 입력하세요.
기본 경로를 사용하고 싶지 않아서 새로운 경로를 입력해야 합니다. 하지만 이 스크립트는 백그라운드에서 실행되므로 경로를 제공해야 합니다. 스크립트 형식의 정확한 응답을 잘 모르겠습니다.
답변1
파이프를 사용하여 스크립트의 표준 입력에 대한 답변을 에코할 수 있습니다.
echo "My/Path/not/default"| yourscript.sh
답변2
스크립트가 시작될 때 모든 입력을 제공할 수 있는 경우 다음을 통해 그렇게 할 수 있습니다.리디렉션프로그램 입력. 즉, /path/to/installer
달리는 대신 달리세요.
{ echo '/the/path/where/to/install';
echo 'answer to the second prompt';
} | /path/to/installer
또는 사용여기 문서:
/path/to/installer <<'EOF'
/the/path/where/to/install
answer to the second prompt
EOF
때때로 프로그램과 상호 작용하고 싶지만 다른 작업에도 터미널을 사용하려면 다음 환경에서 프로그램을 실행하십시오.터미널 멀티플렉서예를 들어화면또는멀티플렉서. screen을 사용하여 를 실행하여 세션을 시작한 screen
다음 프로그램을 시작합니다. 다른 작업을 수행하려면 +를 눌러 Ctrl두 번째 창을 만든 다음 +를 눌러 창 사이를 이동하세요. 화면을 종료하고 프로그램을 계속 실행하려면 + , ("분리")를 누르십시오. 기존 Screen 세션으로 돌아가려면 실행하세요(옵션 없이 새 세션이 시작됨).AcCtrlAnCtrlAdscreen -rd
screen
답변3
자동 답변을 제공하려면 다음 방법 중 하나를 사용할 수 있습니다.
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개의 백그라운드 명령줄을 사용하는 것입니다. 하나는 스크립트를 설치하고 다른 하나는 프롬프트를 기다리고 답변을 제공하는 것입니다.
통신에는 네임드 파이프( input
)와 일반 파일( output.log
)이 사용됩니다.
tail --pid=$installerpid -fn 1 "${tempdir}"/output.log
파일에 쓰여진 줄을 인쇄하십시오 output.log
. 설치 프로그램 스크립트가 종료되면 종료됩니다.
( fgrep -q ... ; printf .. ) >> ...input
: 프롬프트가 발견될 때까지 차단하고 설치 스크립트에 대한 새 경로를 제공합니다.