문제

내가 실행 openvpn 전 ssh'ing 으로 서버 openvpn 명령 에코"밖으로 초기 시퀀스를 완료된".

그래서 내가 원하는 스크립트 설치 openvpn 다음 ssh 습니다.

나의 질문은:당신은 어떻게 실행하는 명령에서 배경이 기다리고 그것을 echo""완료하기 전에 다른 프로그램을 실행하면?

나의 현재 방법 2 터미널 창이 열립,실행:

sudo openvpn --config FILE

다른 실행:

ssh SERVER

면 먼저 터미널 창에서는 나에는"초기화 시퀀스를 완료"텍스트입니다.

도움이 되었습니까?

해결책

그것은 당신처럼 보인다고 싶 실행 openvpn 과정으로 배경에 처리하는 동안 그것의 표준에서 포그라운드.

exec 3< <(sudo openvpn --config FILE)
sed '/Initialization Sequence Completed$/q' <&3 ; cat <&3 &
# VPN initialization is now complete and running in the background
ssh SERVER

설명

Let's break 그것은 조각으로:

  1. echo <(sudo openvpn --config FILE) 인쇄 같은 뭔가 /dev/fd63
    • <(..) 실행 openvpn 에서 배경,그리고...
    • 첨부의 표준을 설명자 파일입에 의해 인쇄 echo
  2. exec 3< /dev/fd63
    • (가 /dev/fd63 은 파일 기술자 인쇄에서 1 단계)
    • 이 있는지를 알려주는 역할을 열고 파일 기술자(/dev/fd63)을 읽기 위해,그리고...
    • 사용할 수 있도록에서 파일 설명 3
  3. sed '/Initialization Sequence Completed$/q' <&3
    • 이제 우리는 실행 sed 에서 포그라운드,그러나 그것을 읽기에서 파일 설명 3
    • sed 보고는 현재 라인이 끝나는"초기화 시퀀스를 완료"는 종료됩니다(이하 /q 일)
  4. cat <&3 &
    • openvpn 유지 작성하는 파일기술자 3 결국 블록이 없는 경우에서 읽는다
    • 을 방지하기 위해,우리가 실행 고양이 에서 배경을 읽고 나머지는 출력

기본 아이디어를 실행하는 것입 openvpn 에서 배경지식을 산출이 어딘가에 그래서 우리는 명령을 실행할 수 있습에서 포그라운드 차단하는 때까지 그것을 읽는 마법의 단어"초기 시퀀스를 완료된".위의 코드를 수행하려고 그것을 만들지 않고 지저분한 임시 파일이지만,간단한 방법이 될 수 있는 사용자 임시 파일입니다.

다른 팁

-m 1 와 함께 --line-buffered 에 grep 를 종료하 grep 후 첫 경기에서 지속적인다.이동:

sudo openvpn --config FILE | grep -m "Initialization Sequence Completed" --line-buffered && ssh SERVER
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top