머신을 시작할 때마다 다음 프로그램을 실행합니다.
$ cat start.sh
#! /bin/bash
google-chrome &> /dev/null &
lantern &> /dev/null &
xdg-open . &> /dev/null &
emacs &> /dev/null &
code ~/Programs/ &> /dev/null &
xdg-open ~/Reference/topic_regex.md &> /dev/null &
번거롭네요 &> /dev/null &
... 논리를 어떻게 단축할 수 있을까요?
답변1
부분은 &> /dev/null
출력 리디렉션을 의미합니다. 여러 명령을 블록으로 그룹화하여 동일한 파일로 리디렉션할 수 있습니다.
#! /bin/bash
{
google-chrome &
lantern &
xdg-open . &
emacs &
code ~/Programs/ &
xdg-open ~/Reference/topic_regex.md &
} &> /dev/null
그러나 동일한 기능을 사용하여 백그라운드에서 개별 명령을 시작할 수는 없습니다( &
). 블록 뒤에 놓는 것은 &
전체 블록을 백그라운드에서 단일 스크립트로 실행하는 것을 의미합니다.
답변2
.bashrc
터미널에서 분리된 작업을 실행하기 위해 함수를 작성하고 이를 my에 넣었습니다 .
detach ()
{
( "$@" &> /dev/null & )
}
... 그런 다음:
detach google-chrome
detach xdg-open ~/Reference/topic_regex.md
그리고 저는 게을러서 다음에 대한 단축키도 작성했습니다 xdg-open
.
xo ()
{
for var in "$@"; do
detach xdg-open "$var";
done
}
정확히 하나의 인수가 필요하기 때문에 xdg-open
함수는 xo
주어진 모든 인수를 반복하고 xdg-open
각 인수를 별도로 호출합니다.
이는 다음을 허용합니다:
detach google-chrome
xo . ~/Reference/topic_regex.md
답변3
다음을 사용하여 모든 후속 명령의 출력을 리디렉션할 수 있습니다.
exec 1>/dev/null
exec 2>/dev/null
답변4
/dev/null
리디렉션을 단축하기 위해 더 짧은 경로 와 같은 특수 파일을 만들었습니다 . /n
새 파일의 경로로 사용했습니다 .
sudo mknod -m 0666 /n c 1 3
이 방법을 사용하면 개별 줄을 다음과 같이 줄일 수 있습니다.
google-chrome &>/n &