2011-12-08 2 views
11

나는 포크를 바로 잡기를 원하고 출력을 무시하고 싶다. 실제로 내가 스크립트 (silent)를 작성하여 다음과 같이 수행했습니다.단순히 명령의 출력을/dev/null로 포크 팅하고 리다이렉트한다.

#!/bin/bash 
[email protected] &> /dev/null & 

예를 들어 다음과 같이 실행할 수 있습니다.

silent inkscape myfile.svg 

내 터미널은 방금 포크 한 프로세스의 디버그 출력으로 인해 오염되지 않습니다.

나는 두 가지 질문이 있습니다

  1. 이 일을 "공식적인"방법이있을 것인가를 즉 &> /dev/null &에 짧은하지만 해당 뭔가?

  2. silent 명령이없는 것처럼 탭 완료 작업을 수행 할 수있는 방법이 있습니까? 예를 들어, silent inksc을 입력 한 후 [tab]을 누르면 bash가 내 명령을 silent inkscape으로 자동 완성합니다.

+0

당신은 '마치 거기에 없었던 것처럼'썼습니다. 미안, '그게 뭐야?' 게시물을 수정하여 명확하게 할 수 있습니다. 행운을 빕니다. – shellter

+0

이것은 bash가 'silent'에 대한 인수를 일반 명령으로 취급하고 해당 명령에 대해 정상적인 탭 완성을 사용할 수 있도록하는 것을 의미합니다. 그래서'조용한 자식 pus [TAB]'은'조용한 git push '를 완성 할 것입니다. –

+1

두 번째 질문을 물었습니다. 감사합니다. git 예제는 아마도 더 좋을 것입니다. 왜냐하면 bash가 그 경우에 git 완성 프로파일을 사용하기를 바랍니다. – Philippe

답변

4

제외 : 아마도 silent 스크립트에서 exec "[email protected]" &> /dev/null & 스크립트를 사용하여 하위 셸을 버리도록하고 "[email protected]" 주위의 따옴표는 공백을 제거합니다.

# 2 : complete -F _command silent은 원하는대로해야합니다. (해당 스크립트의 버전을 launch이라고하고 .bash_profile에 이 있음)

0

아마도 '탭 키를 다시 바인딩 할 수 있습니까? Enter 키가있는 수퍼 유저 Stackoverflow의 example이 표시됩니다. 이것이 올바른 생각입니까?

1

다음은 대화 형 (및 수다스러운) X 앱을 시작하는 데 사용하는 작은 스크립트입니다. xterm을

#!/bin/bash 
exe="$1" 
shift 
"$exe" "[email protected]" 2>/tmp/$$."$exe".err 1>&2 & disown $! 

출력이 터미널 종료하면 죽지 않을 것이다, 그러나 경우에 무언가는 사용 로그를하지 않을 경우 모든 출력/tmp를

의 로그가 잘못 간다 대신/dev/null.

스크립트 알레르기가있는 경우에도 기능에서 작동합니다.

2

아무런 효과가없는 것처럼 보이네요. 탭 완료 문제는 bash가 파일의 인수를 스크립트의 인수로 완료하려고 시도하는 반면, 완료 규칙은 nohup이 명령을 첫 번째 인수로 사용한다는 것을 알고 있기 때문입니다.

Nohup은 stout 및 stderr을 nohup.out으로 리디렉션하고 쉘이 종료 된 경우에도 명령을 실행 상태로 둡니다.

+0

나는'nohup'이 내가 원하는 것을 거의 추측한다. 내가 그 동작을 이해하는 한 그것은 자동적으로 프로세스를 포크하지 않는다. – Philippe

+0

아니요, 백그라운드에서 프로세스를 실행해야하는 경우 "nohup 명령 &"을 사용할 수 있습니다. – nelz