나는 노력한다일부 명령을 비동기식으로 실행로그인 스크립트( .bash_profile
)에서.
새 터미널을 열면 다음과 같은 메시지가 표시됩니다. SSH를 통해 시스템에 로그인할 때도 나타납니다.
Last login: Sat Jun 11 19:21:44 on ttys001
[1]- Exit 127 nohup -c 'git fetch -p && git pull' < /dev/null >&/dev/null (wd: ~/cryptopp)
(wd now: ~)
[2]+ Exit 127 nohup -c 'git fetch -p && git pull' < /dev/null >&/dev/null (wd: ~/openssl)
(wd now: ~)
로그인 스크립트는 다음을 수행합니다.
if [ -d "$HOME/cryptopp" ]; then
cd "$HOME/cryptopp"
nohup -c 'git fetch -p && git pull' </dev/null &>/dev/null &
fi
if [ -d "$HOME/openssl" ]; then
cd "$HOME/openssl"
nohup -c 'git fetch -p && git pull' </dev/null &>/dev/null &
fi
추가 리디렉션 롤백은 다음으로 인해 발생합니다.nohup: 입력을 무시하고 "nohup.out"에 출력을 추가합니다.. 추가 작은따옴표는 다음과 같습니다.작은따옴표로 묶인 문자열에서 작은따옴표를 이스케이프 처리하는 방법은 무엇입니까?
중요한 것은 OS X에서 작업 중이므로 Bash 3을 사용합니다. 그러나 스크립트는 일반적으로 Linux, BSD 및 Solaris에서 실행되며 Debian 8에서도 본 적이 있습니다.
몇 가지 질문이 있습니다. 첫째, 에 대한 불만은 무엇입니까 nohup
? 둘째, nohup
내가 불평하고 있는 문제를 어떻게 해결합니까 ? 셋째, 그러한 메시지를 억제하는 방법은 무엇입니까?
답변1
출력은 에서 nohup
가 아니라 쉘(bash)에서 나옵니다.
이러한 프로세스를 백그라운드에 두는 데 사용하므로 &
명령이 종료될 때 쉘이 알려줍니다. 셸에서 이 작업을 수행하지 않으려면 을 사용할 수 있습니다 disown
. 또한 을 사용하면 disown
더 이상 필요하지 않습니다 nohup
.
if [ -d "$HOME/cryptopp" ]; then
(
cd "$HOME/cryptopp"
git fetch -p && git pull
) </dev/null &>/dev/null &
disown $!
fi
예제에서는 리디렉션을 사용하여 서브셸을 생성하고 백그라운드에 배치한 다음 폐기합니다.