2016-08-08 3 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 directory에서 log.txt 정지의 출력과 내 채찍 꼬리 메뉴 t 것처럼 (메인 페이지로 돌아갑니다 그는 설정이 완료하지만, 나 또한 너무 로그의 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을 사용하면 해당 로그 파일이 생성되는 디렉토리가 변경됩니다. 이전에 그 쓰기를, 그 파일에 쓸 각각의 명령에 >&3를 추가 할 때마다,

exec 3>log.txt 

... 그리고 :

사용, 스크립트의 상단이, 를 해결하려면 열린 파일 기술자.

+0

위대한, 그러나 내가 만나는 유일한 문제는 & Whitail' 게이지를 오버플로 대신 출력을 화면으로 리디렉션합니다. % 대신 텍스트. 원래는''log.txt 2> & 1'을 사용하여 출력을'log.txt'로 억누르고있었습니다. – Godzilla74

+0

'> & 3'은 실제로 출력을 화면으로 리디렉션하지 않습니다. 어쩌면 당신은 * stderr * 화면으로가는 것을 말하는 겁니까? '> & 3 2> & 1' 또는'> & 3 2> & 3' –

+0

Ok, 그래서 자동 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