如果脚本被用户中止,则停止脚本

时间:2015-01-14 03:30:40

标签: bash sudo keychain abort

请原谅这是一个天真的问题,我不是程序员。

我有一个脚本可以在OSX上卸载程序,我希望它足以让客户面对。

  1. 如果用户使用^ C中止脚本,脚本由于某种原因仍会运行脚本的其余部分并打印出“uninstall complete”,即使它已中止。
  2. 例如,如果他们点击是并继续,但是然后使用^ C中止密码提示“卸载完成”仍然在终端中打印

    1. 如果不需要sudo密码,有没有办法隐藏“请输入你的密码”输出,只有在没有运行sudo时才显示。

    2. 删除通用密码钥匙串密码,有没有办法一次删除所有值,而不是像我现在一样删除它。

    3. 卸载脚本

          #!/bin/bash
          red='\e[1;91m'
      	NC='\e[0m'
      	blue='\e[1;94m'
      	cyan='\e[1;96m'
      
      	echo
      	printf " Hello ${cyan}$USER${NC}, this will completely remove ${red}Application${NC} from your system"
      	echo
      
      	while true
      	do
      		 echo
      		 printf " Uninstall requires root permission\n Would you like to continue?\n Please enter ${blue}\"Yes\"${NC} or ${red}\"No\"${NC}:"
      		 read -p " " yn
      		case $yn in
      			[Yy]* ) osascript -e 'tell application "Application" to quit'
      					security delete-generic-password -s "Application Storage" > /dev/null 2>&1
      					security delete-generic-password -s "Application Storage" > /dev/null 2>&1 
      					security delete-generic-password -s "Application Storage" > /dev/null 2>&1
      					rm -rf /Users/$USER/Library/Application
                          printf "Please enter your password\n"
      					sudo rm -rf /Library/LaunchDaemons/com.application.helper.plist /Library/PrivilegedHelperTools/com.application.helper /Library/Application\ Support/Application/ /Applications/Application.app/
      					printf "\n ${blue}Uninstall ${blue}Complete \n\n${NC}"; exit;;
      			[Nn]* ) printf "\n ${red}Uninstall ${red}Cancelled \n\n${NC}"; exit;;
      			* ) echo "Sorry please try again";;
      		esac
      	done

1 个答案:

答案 0 :(得分:1)

不要在你的脚本中放置sudo,用户应该知道什么时候需要sudo,并且应该通过使用sudo启动脚本来实际提供它。如果不允许它在权限不足的情况下自然失败。还要照顾你的其他问题。