2015-01-14 4 views
0

명령 줄 또는 대화 형 모드에서 실행할 수있는 유틸리티를 작성하고 있습니다. 코드에서 대화 형 플래그가 설정되어 있는지 확인한 다음 입력을 읽는 사용자에게 질문을 표시합니다. 그러나, 이제까지 질문을 위해, 나는 상태와 대화식 깃발을 검사하고 싶지 않다. bash 스크립트에서 이것을 달성하는보다 효율적인 방법이 있습니까?셸 스크립트 : 변수를 확인한 다음 대화식 모드를 실행하십시오.

모든 포인터가 크게 감사드립니다!

고맙습니다.

답변

1

어쩌면 이런가?

#! /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 

이, 그러나, 당신이 원하는 아마되지 않습니다 : 당신은 쉘이 "대화 형 모드"인 경우 쉘에 의해 정의 된대로, 말하고 싶은 경우

1

, 당신은 같은 것을 사용할 수 있습니다. 예를 들어, 쉘 스크립트는 기본적으로 "비대화 형"입니다.

사용자에게 질문 할 수 있는지 알고 싶다면 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