2014-04-29 2 views
3

bash에서 함수를 호출하고 해당 함수 자체가 printf를 사용하여 터미널에 메시지를 출력하도록 설계된 경우 어떻게 그 기능을 억제 할 수 있습니까? 내가 더 설명하게 해줘.서브 쉘에서 bash 함수를 호출하지 못하도록합니다.

일반적으로 메인 스크립트가 있습니다. 이 스크립트는 함수를 호출합니다. 이 함수는 정상적인 작업을 수행하고 printf를 사용하여 터미널에 출력합니다.

나는 백그라운드에서 해당 기능을 실행하고 아무 것도 출력하지 않을 수있는 대체 옵션을 만들려고합니다.

FUNCTION & > /dev/null 2>&1 

이 백그라운드에서 정상적인 기능을 실행하고 모든 출력 폐기 :

일반적으로 나는 다음과 같이 생각한다.

처음에는 효과가있는 것 같습니다. 메시지가 일반적으로 나타나는 곳은 비어 있으며 주 스크립트는 실행이 완료됩니다. 일단 프롬프트로 돌아 가면, 많은 다른 것들에 대해 반복되는 기능이 완료되고 프롬프트 아래의 터미널로 출력을 시작합니다.

생각하십니까?

답변

5

당신이 배경에 기능을 넣어해야하는 경우 &control operator 요구는 모든 리디렉션 사양 한 후, 바로 명령의 끝에서 이동 :

$ function myfunc() { 
> printf "%s\n" "normal message" 
> printf "%s\n" "error message" 1>&2 
> } 
$ myfunc 
normal message 
error message 
$ myfunc > /dev/null 2>&1 & 
[2] 12081 
$ 
[2]+ Done     myfunc > /dev/null 2>&1 
$ 
+0

Brilliant! 고맙습니다. – Atomiklan

+2

'myfunc & gt;/dev/null &'도 작동합니다. –

5

올바른 구문이 될 것

FUNCTION > /dev/null 2>&1 & 

&;과 같은 명령 종료 자이므로 다음 명령이 아닌 FUNCTION 명령에서 출력 리디렉션을 포함시켜야합니다.

+0

Awww DigitalTrauma가 당신을 너무 이겼습니다. 그래도 감사합니다. 비슷한 해결책을 찾고있는 사람들에게도 마찬가지입니다. – Atomiklan

+0

커맨드가 어떻게 작동 하는지를 보여주고 너무 많은 시간을 들여서 * nothing *으로 구성되어 있지만 리다이렉션을 출력하는 명령이'bash'에 의해 받아 들여지는 이유를 생각하려고했습니다 : – chepner

+2

+1 명령 터미네이터 설명 –

관련 문제