명령 줄 또는 대화 형 모드에서 실행할 수있는 유틸리티를 작성하고 있습니다. 코드에서 대화 형 플래그가 설정되어 있는지 확인한 다음 입력을 읽는 사용자에게 질문을 표시합니다. 그러나, 이제까지 질문을 위해, 나는 상태와 대화식 깃발을 검사하고 싶지 않다. bash 스크립트에서 이것을 달성하는보다 효율적인 방법이 있습니까?셸 스크립트 : 변수를 확인한 다음 대화식 모드를 실행하십시오.
모든 포인터가 크게 감사드립니다!
고맙습니다.
명령 줄 또는 대화 형 모드에서 실행할 수있는 유틸리티를 작성하고 있습니다. 코드에서 대화 형 플래그가 설정되어 있는지 확인한 다음 입력을 읽는 사용자에게 질문을 표시합니다. 그러나, 이제까지 질문을 위해, 나는 상태와 대화식 깃발을 검사하고 싶지 않다. bash 스크립트에서 이것을 달성하는보다 효율적인 방법이 있습니까?셸 스크립트 : 변수를 확인한 다음 대화식 모드를 실행하십시오.
모든 포인터가 크게 감사드립니다!
고맙습니다.
어쩌면 이런가?
#! /bin/bash
function interactive {
shift
while read line; do
something with $line
done
}
getopts 'i' option
[[ $option = 'i' ]] && interactive "[email protected]"
여러 가지 옵션이있는 경우 가장 적합한 스타일이 아닙니다. 이 경우 while getopts
을 사용하고 인수 인덱스를 사용하여 이동하십시오.
case $- in
*i*) # Interactive
;;
*) # Non-interactive
;;
esac
이, 그러나, 당신이 원하는 아마되지 않습니다 : 당신은 쉘이 "대화 형 모드"인 경우 쉘에 의해 정의 된대로, 말하고 싶은 경우
, 당신은 같은 것을 사용할 수 있습니다. 예를 들어, 쉘 스크립트는 기본적으로 "비대화 형"입니다.
사용자에게 질문 할 수 있는지 알고 싶다면 stdin이 터미널에 연결되어 있는지 확인하는 것이 좋습니다. ,, 말, 스크립트가 원격 이상 실행 될 수있는 가능성 다음 a slightly more complicated test이 필요 ssh
있는 경우
if [ -t 0 ]
then
# Interactive: ask user
read -p "Enter a color: " color
read -p "Enter a number: " number
else
# Non-interactive: assign defaults
color="Red"
number=3
fi
echo "color=$color and number=$number"
:이 경우, 당신은 파일 기술자 제로에 -t
시험 (표준 입력이) 사용할 수 있습니다 :
if [ -t "$fd" ] || [ -p /dev/stdin ]
then
echo interactive
else
echo non-interactive
fi