Ich versuche, in ein Verzeichnis zu wechseln und zusätzliche Befehle innerhalb meines whiptail
Dialogfelds auszuführen, aber nach dem Klonen meines Git-Repositorys scheint mein Skript jetzt zu sterben, wenn ich in das Verzeichnis wechseln möchte:Bash whiptail stirbt beim Ändern des Verzeichnisses
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
;;
Logging-Befehle mit set -x
, das wie folgt aussieht:
: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
die Ausgabe von log.txt
Stopps an changing directory
und mein whiptail Menü geht zurück auf die Hauptseite (als ob t er Setup fertig ist, aber es ist nicht, da ich auch die pwd
und installing bundler
im Protokoll zu) sehen sollte:
cloning Repo
Cloning into '/repo'...
changing directory
Ich erhalte keine Fehler, so die Diagnose, was posiert vor sich geht ist das Problem für mich zu sein . Jede Hilfe wird geschätzt!
Welche Version von bash? Angenommen, es ist 4.x, können Sie im Detail zu einem nicht standardmäßigen Dateideskriptor –
auch früher im Skript, haben Sie 'set -e' (oder setzen Sie eine ERR-Falle)? –
... bevor Sie das tun: 'exec {tracefd}> trace.log; BASH_XTRACEFD = $ tracefd; PS4 = ': $ LINENO +'; Setzen Sie "-x" und dann bündeln Sie in "trace.log"; Damit werden die ausgeführten Befehle protokolliert, denen jeweils die Zeilennummer vorangestellt ist. –