gpt4 book ai didi

linux - 如何编写一个返回是否发生错误的 shell 函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:00:12 25 4
gpt4 key购买 nike

我的脚本下方 函数询问您是否要安装 node.js。我知道我可以使用 $? 检查我最后一个命令是否成功。但是现在我有了这个 node() 函数。如何有效地检查我的 shell 函数中是否有错误发生?

node () {
apt-get -y install python g++ make checkinstall
mkdir ~/src && cd $_
wget -N http://nodejs.org/dist/node-latest.tar.gz
tar xzvf node-latest.tar.gz && cd node-v*
./configure
checkinstall -y --install=no --pkgversion 0.10.24 # Replace with current version number.
dpkg -i node_*
cd ~
rm -r ~/src
# If an error occured anywhere in this function,
# an error value should be returned so that the if-clause below fails,
# for to exit the whole script
}

read -p "[q] Install node.js? [y/n] "
if [ $REPLY = "y" ]; then
echo "[x] node script"
node > /dev/null # This should 'get' the error so that ...
else
echo "[s] Skipping installation of node.js"
fi
if [ $? -gt 0 ]; then echo "[e] An error occured"; exit 1; fi # ... it is caught here

echo "[f] Finished successfully"

exit 0

最佳答案

node () {
code=0
apt-get -y install python g++ make checkinstall || ((code +=1))
mkdir ~/src && cd $_ || ((code+=4)
wget -N http://nodejs.org/dist/node-latest.tar.gz || ((code+=8))
tar xzvf node-latest.tar.gz && cd node-v* || ((code+=16))
./configure || ((code++32))
checkinstall -y --install=no --pkgversion 0.10.24 || ((code+=64))
dpkg -i node_* || (code+=128))
cd ~ || ((code+=256))
rm -r ~/src || ((code+=512))
return "$code"
}

如果节点返回错误代码,您可以使用 shell 的按位比较运算符来确定哪一行失败。例如,要测试 wget 行是否失败:

node
code=$?
(( $code & 8 )) && echo "wget failed in node"

如果您想知道哪一行失败并且不执行任何后续行,请使用:

node () {
apt-get -y install python g++ make checkinstall || return 1
mkdir ~/src && cd $_ || return 2
wget -N http://nodejs.org/dist/node-latest.tar.gz || return 3
tar xzvf node-latest.tar.gz && cd node-v* || return 4
./configure || return 5
checkinstall -y --install=no --pkgversion 0.10.24 || return 6
dpkg -i node_* || return 7
cd ~ || return 8
rm -r ~/src || return 9
}

关于linux - 如何编写一个返回是否发生错误的 shell 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21056421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com