2011-10-31 3 views
3

로그 파일에 stdout 및 stderr의 리디렉션을 사용하는 유닉스 쉘 스크립트가 있습니다. 예를 test.sh를 들어 :sudo로 실행되는 리눅스 쉘 스크립트에서 리디렉션 사용

sudo ./test.sh 

&은 다음과 같이 해석된다 "백그라운드에서 실행"

ls -l &>> test.log 

내 문제는 내가 sudo으로 스크립트를 실행할 때이다.

제안 사항?

+0

왜 &가 필요합니까? – hovanessyan

+0

stdout과 stderr를 모두 재지향 –

+0

문제는 '&'가 비동기 적으로 명령을 실행하고 있지만 다른 사람이 기대하는 것이 아니라는 점입니다! 'bash'는'csh'에서'&>'에 대한 문법을 ​​빌 렸습니다. 그러나 bourne 쉘 구문은'&'를'&'명령 종료 자와 0 명령 재 지정으로 명확하게 처리합니다. 백그라운드에서 명령을 실행하지 않는 쉘은 표준을 따르지 않습니다. –

답변

4

그것을 발견 한 스크립트 test.sh이 같은 첫 번째 줄에있는 오두막이없는 것을 : 여러 환경 설정 방식에 영향이 줄없이

#!/bin/bash 

을 스크립트가 실행됩니다 . 귀하의 경우 이것은 ash, ksh, dash 또는 루트 사용자의 설정으로 인해 스크립트를 실행하는 데 사용되는 것과 같은 다른 쉘을 의미합니다.

3

test.sh의 해시 뱅 라인은 무엇입니까? 해당 구문을 지원하는 셸을 지정해야합니다. 어느 쪽도 아니 쉬, 배쉬, KSH,도 CSH가 &>> 리디렉션 연산자가 없다 - - 사실 내가 무엇 쉘 모르겠어요하지만 무엇이든 당신이 명시 적으로 지정해야합니다 :

또는
#!/bin/fancysh 

, 더 이식 가능한 구문을 사용하십시오.

#!/bin/sh 
ls -l >> test.log 2>&1 
1

는 다음과 같이 실행 해보십시오나요 : 문제는 스크립트가 당면한 라인을 가지고 있지 않은 것이 었습니다

ls -l >> test.log 2>&1 
-1

ls -l >>& test.log 
+0

실행하면 구문 오류가 반환됩니다. –

0

로 재 지정의 순서를 변경하십시오

#!/bin/bash 

LD는 ... 제 생각 엔

관련 문제