当前正在尝试编写bash来执行以下操作。
用例是当您从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
答案 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