2016-08-08 14 views
0

私はwhiptailダイアログ画面でディレクトリに変更して追加のコマンドを実行しようとしていますが、私のgitリポジトリをクローンした後、ディレクトリを変更するときにbash whiptailが死ぬ

STATUS=0 
touch log.txt 
while [ $STATUS -lt "100" ]; do 
    echo "cloning Repo" >> log.txt 
    git clone [email protected]:abc/repo.git /repo >> log.txt 2>&1 
    echo "changing directory" >> log.txt 
    cd /repo >> log.txt 2>&1 
    echo `pwd` 
    echo "installing bundler" >> log.txt 
    gem install bundler --no-ri --no-rdoc >> log.txt 2>&1 
    ((STATUS += 99)) 
    echo $STATUS 
done | whiptail --gauge "Setting Up Neo (THIS WILL TAKE SOME TIME)..." 40 78 0 
;; 

ログがこのように見えます、set -xでコマンド:

:66+STATUS=0 
:67+touch log.txt 
:149+whiptail --gauge 'Setting Up (THIS WILL TAKE SOME TIME)...' 40 78 0 
:68+'[' 0 -lt 100 ']' 
:71+echo 'apt-get update' 
:73+(( STATUS += 15 )) 
:74+echo 15 
:77+echo 'apt-get upgrade' 
:79+(( STATUS += 15 )) 
:80+echo 30 
:83+echo 'apt-get -y git-all' 
:85+(( STATUS += 15 )) 
:86+echo 45 
:111+(( STATUS += 30 )) 
:112+echo 75 
:115+rm -rf /repo 
:116+echo 'cloning Repo' 
:117+git clone [email protected]:abcd/repo.git /repo 
:118+echo 'changing directory' 
:119+cd /repo 
::120+pwd 
:120+echo /repo 
:121+echo 'installing bundler' 
:122+gem install bundler --no-ri --no-rdoc 
:148+echo 100 
:68+'[' 100 -lt 100 ']' 
:5+true 
::11+whiptail --title 'Configuration Menu' --menu 'Choose an option' 40 78 30 1 'Show current configuration.' 2 'Setup Wizard.' 0 Exit 

changing directorylog.txt停止の出力と私です:whiptailメニューはトンかのように(メインページに戻ります彼は、セットアップが行われ、私は、あまりにもログにpwdinstalling bundlerが表示されるはずですので、それは)ありませんされています

cloning Repo 
Cloning into '/repo'... 
changing directory 

私は何が起こっているのかを診断することは私にとって問題であることを装っているすべてのエラーを取得していませんよ。どんな助けもありがとう!

+0

どのバージョンのbashですか?それが4.xであると仮定すると、デフォルトではないファイル記述子 –

+0

に詳細にログインすることができます。スクリプトの前の方で 'set -e'を実行しましたか(ERRトラップを設定しましたか? –

+1

...だから、これを行う前に: 'exec {tracefd}> trace.log; BASH_XTRACEFD = $ tracefd; PS4 = ':$ LINENO +'; set -x'を実行し、 'trace.log'にバンドルします。実行されたコマンドをログに記録します。それぞれの行番号は前に付いています。 –

答えて

0

各コマンドで>>log.txtを使用しているため、そのログファイルはすべてのコマンドで再オープンされます。つまり、cdを使用すると、そのログファイルが作成されているディレクトリが変更されます。

exec 3>log.txt 

...そして、あなたがそのファイルに書き込みたい時はいつでも、以前にそれに書き込むために、各コマンドに>&3を追加します、スクリプトの上、使用時をこの問題を解決するには

オープンされたファイル記述子。

+0

これはうまくいきますが、遭遇する唯一の問題は、出力が画面にリダイレクトされることです。これは、%の代わりにテキストで 'whiptail'ゲージがオーバーフローします。もともと私は '' log.txt 2>&1'を使って出力を 'log.txt'に抑えていました。 – Godzilla74

+0

'>&3'は実際に出力を画面にリダイレクトしません。多分あなたはスクリーンに行く* stderr *を指しているでしょうか? '>&3 2>&1'または'>&3 2>&3'のようにするのを避けるために、 –

+0

あなたのauto-fd割り当て方法が好きでした... 'exec {log_fd}> log.txt'私は最初に置いた。今、私は 'gem install bundler --no-ri --no-rdoc>と$ log_fd'コマンドで次のようにします。一番上の 'exec ...'を 'exec {log_fd}>&3 2>&1> log.txt'のように調整する必要がありますか、それとも間違っていますか?申し訳ありません... FDメソッドは私にとって外国です! – Godzilla74

関連する問題