쉘 명령 다음에 별칭으로 `1>&- 2>&- &'를 사용하십시오.

쉘 명령 다음에 별칭으로 `1>&- 2>&- &'를 사용하십시오.

bash텍스트 출력 없이 백그라운드에서 프로그램을 실행하려면 다음을 사용하십시오 1>&- 2>&- &. 이에 대한 별칭을 정의하고 싶습니다. 그러나 내가 글을 쓴다면.bashrc

alias nooutput = '1>&- 2>&- &'

이 문자열은 nooutput쉘에서 실행하려는 실행 파일에 대한 추가 인수(예: 파일 이름)로 해석됩니다. 또한 자동 완성 기능이 작동하지 않는 것 같습니다 nooutput. noou예를 들어 다음을 누르면 tab자동 완성이 되지 않습니다.

이 경우 별칭을 어떻게 사용합니까?


GNU bash, version 5.0.17(1)-release (x86_64-pc-linux-gnu)저는 Ubuntu Ubuntu 20.04.3 LTS와 Linux를 사용하고 있지만 해결책이 있다면 가능한 한 일반적이고 특정 버전이나 시스템 아키텍처에 얽매이지 않았 5.4.0-91-generic x86_64으면 좋겠습니다 .bash

답변1

첫 번째,별칭을 사용하면 단어로 사용될 때 단어 대신 문자열을 사용할 수 있습니다.첫번째 단어간단한 명령.명령 중간이나 끝에 있지 않으므로 명령 끝에 별칭을 사용하려고 할 때.myCommand myAlias, 이전에 언급한 대로 작동하지 않습니다. 왜 별칭은 명령의 첫 번째 단어여야 합니까?myAlias myCommand;

그러나 사용하는 백그라운드 실행 연산자는 1>&- 2>&- &명령 시작 부분에 나타날 수 없으므로( do 아님 ) 별칭에서 유사한 작업을 사용할 & myCommand수 없습니다 .&

두 번째 문제는 별칭 이름과 별칭 텍스트 주위에 공백이 없어야 한다는 것입니다.

alias nooutput='1>&- 2>&- '다음과 같이 실행하십시오 .

nooutput myCommand &

참고: 쉘 함수는 거의 모든 목적에서 별칭보다 선호됩니다.

답변2

Bash는 첫 번째 단어 위치(또는 첫 번째 단어가 공백으로 끝나는 경우 다른 별칭 뒤)의 별칭만 지원합니다. 그러나 zsh에서는 다음과 같이 설정할 수 있습니다.전역 별칭, 이는 어느 위치에서나 확장됩니다.

zsh% alias -g nooutput='1>&- 2>&- &'
% (echo foo; sleep 12) nooutput
[1] 15058
...

적어도 내 zsh 버전은 첫 번째 위치 이외의 위치에서 별칭을 탭 완성하지 않지만 이것이 구성될 수 있는지는 확인하지 못했습니다.

답변3

다음 기능을 사용할 수 있습니다.

run_bg() { eval $@ > /dev/null & }

이 함수 정의 줄을 에 추가하면 됩니다 ~/.bashrc.

용법:

run_bg echo "hey"

관련 정보