&와 &&를 결합하는 방법은 무엇입니까?

&와 &&를 결합하는 방법은 무엇입니까?

검색하기 어려운 질문입니다!

다음과 같은 쉘 스크립트가 있습니다.

#!/bin/bash
./script.fcgi --socket /tmp/fcgi-socket &
sleep 2
chmod a+w /tmp/fcgi-socket

script.fcgi는 장기 실행 프로그램(데몬?)이므로 백그라운드에서 실행되도록 하려면 &를 추가해야 합니다. 피곤하다는 사실 외에도 잠이 필요합니다. 그렇지 않으면 스크립트가 chmod를 수행하기 전에 소켓을 설정할 시간이 없기 때문입니다.

나는 다음과 같은 줄을 원합니다 :

./script.fcgi --socket /tmp/fcgi-socket & && chmod a+w /tmp/fcgi-socket 

하지만 이건 불가능할 것 같아요. 그리고 올바른 쓰기 권한으로 소켓을 설정하는 스크립트를 얻는 방법을 모르겠습니다. (이것은 또 다른 질문이 될 것입니다.) 하지만 궁금합니다. &와 && 결합에 대해 제가 뭔가를 놓치고 있는 걸까요, 아니면 제가 원하는 것을 실제로 할 수 없는 걸까요?

답변1

당신이 원하는 것이 무엇인지 이해하고 프로세스가 포크되는 경향이 없다고 가정하면 다음과 같이 할 것입니다.

/long/running/process with args &
LRP_PID=$!
sleep 2
if jobs %% #It's alive!
then 
    chmod a+w ...
fi

(또는 kill -0 $LRP_PID대신 jobs 1.)

답변2

예, 물론입니다. 구문은 다음과 같습니다.

 (/absolute/path/to/script/script.fcgi --socket /tmp/fcgi-socket &) && (sleep 2; chmod a+w /tmp/fcgi-socket)

하지만 Mikel의 의견을 기억하세요. 맞습니다.

편집하다:

아래 @muru의 의견을 고려하여 설명하겠습니다. OP는 첫 번째 명령을 성공적으로 완료한 후 두 번째 및 세 번째 명령을 실행하는 것을 원하지 않습니다. 그는 이것이 장기 실행 명령이라고 명시적으로 명시합니다. OP는 성공 후 세 번째 명령을 실행하려고 합니다.시작첫 번째 명령. 위의 코드 줄이 바로 그 일을 합니다.

편집 2:

@muru의 프롬프트에 따라 다음 코드 줄은 초기 명령이 시작될 때 오류를 확인합니다.

 (/absolute/path/to/script/script.fcgi --socket /tmp/fcgi-socket  2> /path/to/errors.txt &) && (sleep 2; if ! [ -s /path/to/errors.txt]; then chmod a+w /tmp/fcgi-socket; fi)

답변3

터미널을 종료하고 싶지 않으면 다음을 실행할 수 있습니다.

./script.fcgi --socket /tmp/fcgi-socket && chmod a+w /tmp/fcgi-socket &

로그아웃하는 경우 또는 같은 터미널 멀티플렉서에서 스크립트를 시작하는 것이 가장 screen좋습니다 tmux.

나는 그것에 익숙하지 않지만 tmux다음을 사용할 수 있습니다 screen.

명령을 사용하여 화면을 시작합니다 screen. 새로운 "화면" 셸에서 다음을 실행합니다.

./script.fcgi --socket /tmp/fcgi-socket && chmod a+w /tmp/fcgi-socket

이기다enter

ctrl + a누른 후 누르면 화면에서 분리됩니다.ctrl + d

돌아오면 다음을 사용하여 화면에 다시 연결할 수 있습니다.

screen -r

화면 밖에서 이 스크립트를 실행하면 백그라운드에서 스크립트가 실행됩니다. 화면에 다시 연결하면 해당 셸에 다시 연결할 수 있습니다.

답변4

내 생각에는 많은 사람들이 생각을 너무 많이 하는 것 같다. 말할 만큼

./script.fcgi --socket /tmp/fcgi-socket & sleep 2; chmod a+w /tmp/fcgi-socket

왜냐하면,구문론적으로&와 유사하게 동작합니다 ;. (예, 물론 그렇습니다.의미적으로다른. )

관련 정보