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"