"-y" 또는 "--yes"와 같은 특정 매개변수가 전달되면 스크립트가 비대화형이 되도록 하고 사용자 확인을 건너뛰기를 원합니다. 또한 내가 소스로 사용하는 다른 스크립트에 매개변수를 전달하는 방법도 알고 싶습니다.
SHORT=yq
LONG=yes,quick
PARSED=$(getopt --options $SHORT --longoptions $LONG --name "$0" -- "$@")
eval set -- "$PARSED"
q=0; autoConfirm=0
while true; do
case "$1" in
-q|--quick)
q=1
shift
;;
-y|--yes)
autoConfirm=1
shift
;;
--)
shift
break
;;
*)
echo "Invalid option. Use -h for help"
exit 3
;;
esac
done
assertConfirmation () {
local promptMsg=$1 autoConfirm=$2
if (( autoConfirm )); then
return
else
clear
read -n 1 -p "$promptMsg (yes/No) "
printf '\n========================================================================'
if [[ $REPLY =~ ^([Yy])$ ]]; then
return
fi
fi
return 1
}
if assertConfirmation "Install this?" "${autoConfirm:?}"; then
install
fi
source installation "${autoConfirm:?}" "${q:?}"
답변1
설치 스크립트의 예상 내용에 따라 다릅니다. 일을 단순하게 유지하려면 -y
및 매개변수를 허용하는 것이 좋습니다 -q
. 이 방법으로 Case 문을 변경하고 합계를 1(기본적으로 null임) 대신에 설정하고 설치 스크립트를 다음과 같이 호출할 q
수 있습니다 autoConfirm
.-q
-y
source installation $autoConfirm $q
이렇게 변경한 후 를 사용하여 [[ $autoconfirm ]]
설정되었는지 확인하세요 (( autoConfirm ))
.