如何知道管道中的命令是否成功运行

时间:2017-08-22 05:05:33

标签: bash shell

我正在尝试编写一个脚本,它将使用apt下载git,并且在成功下载git后我想为git设置配置。我写了一个完成这项工作的脚本。但我很想知道有没有办法知道git安装是否正确完成。如果安装了git,那么我将设置配置,否则我将重试或者显示错误消息。

我的代码:

#!/bin/bash
# Read Password
echo -n Sudo Password: 
read -s password

# Run Command

setup_git_config(){
    git config --global alias.co checkout
    git config --global alias.br branch
    git config --global alias.ci commit
    git config --global alias.st status
}

install_git(){
    echo $password | sudo -S apt-get install git -y
    # here i want to check above command successfully ran or not
    setup_git_config
}

#Execute commands
install_git

我问的是这个问题,因为我想编写一个脚本来安装一些基本的程序和配置。

更新:

install_git(){
    typeset ret_code
    ret_code=$?
    echo 'xyz' | sudo -S apt-get install git -y
    if [ $ret_code != 0 ]; then
        printf "Error " $ret_code
        exit $ret_code
    fi
    echo $ret_code #always echo 0
    setup_git_config
}

始终打印0

1 个答案:

答案 0 :(得分:2)

由于您需要apt-get的返回码,请替换:

ret_code=$?
echo 'xyz' | sudo -S apt-get install git -y

使用:

echo 'xyz' | sudo -S apt-get install git -y
ret_code=$?

返回代码仅在命令执行后可用。因此,您必须在apt-get运行之后,而不是在运行之前捕获$?的值。

注释

  1. apt-get设置返回代码为0(成功)或100(错误)。

  2. 在命令(例如echo "$password")中输入密码意味着密码将以纯文本形式提供给可以运行ps的计算机上的任何人。删除密码可能是更好的做法,而是使用NOPASSWD选项将apt-get命令添加到sudoers。