Whiptail没有运行我的bash命令

时间:2016-08-08 15:28:55

标签: linux bash

我使用whiptail创建了一个bash程序,为用户提供了一个图形类型界面来设置他们的系统。出于某种原因,我的脚本不运行任何bash命令,而是通过输出到我的log.txt文件循环,但没有安装包。

STATUS=0
     touch log.txt
     while [ $STATUS -lt 100 ]; do
        # update apt repos
        apt-get update
        wait
        echo "apt-get update" >> log.txt
        let STATUS=STATUS+15
        echo $STATUS
        # update apt package
        apt-get upgrade
        wait
        echo "apt-get upgrade" >> log.txt
        let STATUS=STATUS+15
        echo $STATUS
        # install required packages
        apt-get -y git-all nmap hydra
        wait
        echo "apt-get -y git-all nmap hydra" >> log.txt
        let STATUS=STATUS+10
        echo $STATUS
        # install rbenv
        git clone https://github.com/rbenv/rbenv.git ~/.rbenv
        wait
        echo "cloning rbenv" >> log.txt
        echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
        echo 'exporting PATH' >> log.txt
        ~/.rbenv/bin/rbenv init
        wait
        echo 'initializing rbenv' >> log.txt
        git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
        wait
        echo "cloning ruby-build" >> log.txt
        rbenv install 2.1.4
        wait
        echo "installing ruby 2.1.4" >> log.txt
        let STATUS=STATUS+25
        echo $STATUS
      done | whiptail --gauge "Setting Up Neo (THIS WILL TAKE SOME TIME)..." 40 78 0

因此,为了确认我的while循环实际上正在运行,我开始向log.txt回显事物。这是输出:

apt-get update
apt-get upgrade
apt-get -y git-all nmap hydra
cloning rbenv
exporting PATH
initializing rbenv
cloning ruby-build
installing ruby 2.1.4

我做错了什么?

1 个答案:

答案 0 :(得分:0)

首先,由于您没有后台进程,wait没有做任何事情。

其次,由于whiptail正在读取stdin,因此您需要确保所有apt-get,git,rbenv等命令的stdout被重定向到stderr,或更好地重定向到您的日志。

    # update apt repos
    echo "apt-get update" >> log.txt
    apt-get update >>log.txt 2>&1
    (( STATUS += 15 ))
    echo $STATUS

    # update apt package
    echo "apt-get upgrade" >> log.txt
    apt-get upgrade >> log.txt 2>&1
    (( STATUS += 15 ))
    echo $STATUS

等等。