在不影响回波返回的情况下运行之前,需要一种方法来批准bash cmd exec

时间:2018-07-05 16:40:12

标签: bash

当前正在尝试编写bash来执行以下操作。

  • 检查是否安装了curl
  • 在运行之前打印出“卷曲”,以便用户可以选择加入/退出他们认为不安全的操作。

用例是当您从github下载一个大脚本并且想要对其执行有更多控制时。还要更了解它是如何工作的。

我不确定如何在不弄乱“返回”回声的情况下包括此选择加入/退出代码。也许答案是使用与读取-n 1 -s -r -p代码不同的东西。我喜欢该解决方案,因为它允许敲击任何键以继续。

要明确。如果以后再检查“是/否”,它会弄乱,因为它将包含用于按任意键继续的字符。在我的输出示例中,按下空格键以继续

#! /bin/bash

# Returns YES if installed otherwise return NO
check_curl_installed() {
echo >&2 "Before running, the command will be printed below."
echo >&2 "Press any key to approve running it"
read -n 1 -s -r -p "which curl"
  echo ""
  if which curl > /dev/null; then
    echo "YES"
  else
    echo "NO"
  fi
}
main() {
  RESULT=$(check_curl_installed)
  echo $RESULT
  echo x${RESULT}x

}

main "$@"
exit 0

这是输出

user@computer:tmp$ ./check_curl_installed.sh 
Before running, the command it will be printed below.
Press any key to approve running it
which curlYES
x YESx

2 个答案:

答案 0 :(得分:2)

使用函数的退出状态,而不是使用函数的输出。

check_curl_installed() {
    echo >&2 "Before running, the command will be printed below."
    echo >&2 "Press any key to approve running it"
    read -n 1 -s -r -p "which curl"
    echo ""
    if which curl > /dev/null; then
        return 0
    else
        return 1
    fi
}

if check_curl_installed
then
    # do something
else
    # do something else
fi

答案 1 :(得分:0)

这个修改后的版本如何只获得Y键来回答...

#! /bin/bash

# Returns YES if installed otherwise return NO
check_curl_installed() {
echo >&2 "Before running, the command will be printed below."
echo >&2 "Press Y key to approve running it"
read -n 1 -r -s -p "Which curl?"
  if [[ $REPLY =~ ^[Yy]$ ]]; then
    if which curl > /dev/null ; then
      printf "\nYES It is installed\n"
    else
      printf "\nNO It is not installed\n"
    fi
  else
    printf "\nExiting - not checking\n"
  fi

}
main() {
check_curl_installed

}

main "$@"
exit 0

您的回声结果是,我认为只需拉出check_curl_installed函数的第一行... 也许是否将结果设置为数组?

我周围的测试表明,它忘记了主函数较高的函数中的变量。我什至尝试导出以使主要功能正常工作,但无济于事。我在bash上并不强壮,所以我对此表示歉意。

将回声放入每个函数中也可能会更好,而不是将它们推入变量中...

即使不是全部,大多数语言也只能从函数返回一个值。也许这就是为什么您的输出不如您所愿的原因?快速搜索引出了https://unix.stackexchange.com/questions/408543/how-can-a-bash-function-return-multiple-values