2014-11-21 2 views
0

에서 다르게 실행ksh 스크립트 변수 I는 다음과 같이 실행할 때 스크립트라는 cmdtst_multi.ksh을 가지고 nohup을

. ./cmdtst_multi.ksh 

이 같은 인구 가져옵니다 varible있다;

treeLvls=$(td_query {}) 

echo "num of tree lvls:" $treeLvls 
##gives back num of tree lvls: 4 

treeLvlsSQL=$(for i in {1..$treeLvls} 
    do 
    echo ",NULL as LVL$i" 
    done) 

echo "tree sql:" $treeLvlsSQl 
#gives back tree sql: ,NULL as LVL1 ,NULL as LVL2 ,NULL as LVL3 ,NULL as LVL4 

잘 실행하지만이처럼 실행하면

nohup cmdtst_multi.ksh > prcsstst.log & 

treeLvlsSQl이 정확하지 않은 로그 파일에 다음과 같이 나온다 :

tree sql: ,NULL as LVL{1.. ,NULL as LVL4} 

왜 변수가 다르게 실행되는 것입니까?

+2

'nohup'은'ksh'으로 스크립트를 실행하지만 다른 것과는 다른 점이 있을까요? –

+0

'#!/bin/ksh'을 사용하여 스크립트를 시작하고 Jonathan이 올바른지 확인하십시오. ksh가'{1..5} in for {1..5} '구조를 지원합니까? –

답변

2

이 차이점은 스크립트의 시작 부분에 무해한 소싱 연산자 (.) 또는 현재 디렉토리 연산자 (./)와 관련이 있다고 생각합니다.

  1. nohup - 경쟁자로를 배제 로그 파일을 리디렉션 및 배경 과정

- 아니오 사용자 로그 아웃

  • > prcsstst.log & 때 프로세스가 행업하지 않을 수 있도록 끊기가 없다 출력 차이. . 새로운 환경 변수의 설정 및 ./와 별도의 자식 쉘을 산란 방지 현재 쉘을 소싱 의미

    nohup ksh93 -c ". ./cmdtst_multi.ksh" > prcsstst.log 
    

    ../이 중요 스크립트를 의미한다 :

    아래와 같은 소싱 연산자를 nohup을 시도하십시오 에 정의 된 동일한 이름을 가진 다른 스크립트 대신 . (현재 디렉토리)에서 실행됩니다.

    편집 : 조나단 레플러는 자신의 의견에서 지적 하듯이 nohup에서 사용하지 KSH (KSH 아마도 기본 쉘 아닌가요?) 때문에,이 또한 수 공급 때 KSH의 FOR 구문은 처음에 일을하는 이유를 설명 할 수있는 (.)을 현재 쉘 (KSH?)에서 두 번 째 (다른 쉘 유형)에서 제외합니다.

  • +0

    그래서 나는 그것을 실행할 때 ... nohup이 "."을 실행할 수 없다는 오류가 발생합니다. 명령 ... 내 파일에서 chmod 755를했는데 충분하니? – user2061886

    +0

    죄송합니다. 'nohup'은 첫 번째 인수가 파일 이름이 될 것으로 예상합니다. 또한 nohup과'.'는 함께 사용하지 않습니다. nohup은 새 쉘을 생성합니다. 나는 나와 쉘을 가지고 있지 않기 때문에 테스트되지 않은 명령을 편집했다. 편집 된 명령이 작동하면 소싱의 목적을 무효화 할 수있는 새로운 쉘을 생성합니다. 최소한 Ksh가 아닌 다른 쉘에 의해 실행되었다고 확신 할 수 있습니다. – toddlermenot