쉘에 많은 명령을 보내고 명령이 끝나기를 기다리는 방법 [닫힘]


16

나는 약 20 개의 명령을 가지고 있으며이 모든 것을 유닉스 쉘에 보내고 결과를 복사해야하지만 어떻게 해야할지 모르겠다.

나는 그것이 가지고있는 쉘에 대해 확실하지 않습니다. 모바일 네트워크 관리에 연결된 작은 프로그램이기 때문에이 작은 프로그램을 사용하면 명령을 한 줄씩 보내고 비명으로 결과를받을 수 있습니다. 그 때문에 스크립트를 사용할 수 없습니다 명령을 보내는.

명령 1- 서버와 연결하십시오.

명령 1이 끝날 때까지 기다리십시오

명령 2- 서버 1의 모든 정보 업데이트 완료

기다림.

명령 3 . 몇 가지 매개 변수를 가져옵니다.

그리고 더 많은 명령들.

내가 시도cmd1 | cmd2 | cmd3 cmd1 & cmd2 & cmd3cmd1;cmd2

문제는 cmd1RNC (Network element)에 연결되어 있고 15 초 후에 큰 소리가 들립니다 cmd2. 그러나 첫 번째 cmd에서만 작동하십시오. 단서가 어떻게 실행됩니까?


3
스크립트를 사용 하시겠습니까? 또는 &&명령 사이.
Bernhard

답변:


20

일반적으로 cmd1;cmd2;cmd3;cmd4(한 줄에 작성 cmd1 && cmd2 && cmd3 && cmd4하려는 경우 ) 또는 cmd2가 실패 할 때 cmd3을 실행하지 않으려는 경우 사용 합니다.

또는 ;한 줄에 하나의 명령을 작성할 수도 있습니다.

cmd1
cmd2
cmd3
cmd4

백그라운드에서 명령을 병렬로 실행하려면 다음을 사용할 수도 있습니다.

cmd1 &
cmd2 &
cmd3 &
cmd4 &
wait # for cmd1-4 to finish

이러한 방법 중 하나를 쉘 스크립트에 넣을 수도 있습니다. 쉘 스크립트에서 작성하는 것과 실제 쉘 자체에서 작성하는 것에는 약간의 차이가 있습니다.


MM 문제는 cmd1 을 보낼 때 실제로 약 6 초를 끝내야 하며 cmd2cmd1을 보낼 때 여전히 실패 한다는 문제 입니다.
조나단 라울 타 피아 로페즈

4
cmd1;cmd2경우 (또는 cmd1 && cmd2그 문제 의 경우 ) cmd2는 cmd1이 종료 될 때까지 (따라서 완료 될 때까지) 실행되지 않습니다. 따라서 문제가 없어야합니다. 질문을 다시 말하거나 사람들이 실제로 재현 할 수있는 예를 제공하십시오.
frostschutz

좋아요, 질문을 수정하겠습니다. 감사합니다
Jonathan Raul Tapia Lopez

2

sleep환경에서 허용하는 경우 를 살펴볼 수 있습니다. 완전한 순서는 다음과 같습니다 cmd1 && sleep 10s && cmd2.
다음은 수면 관련 매뉴얼 페이지입니다 .


잠자기 / 대기 기능은 이전 프로그램 (백그라운드 프로세스를 생성 할 수 있음)이 완료 및 종료하는 데 걸리는 시간을 결정적으로 알고있는 경우 (IE 중지 문제) 또는 간격 후에 두 번째 명령을 중단하고 실행하려는 경우에만 유용합니다. 두 개가 비동기이지만 여전히 그들 사이에 시간을 보내고 싶다면 발생할 수 있습니다. 그래도 대부분 원하는 것은 아닙니다. 실제로 말하면 효과가있을 수 있습니다. 그러나 그것은 신뢰할 수 없습니다.
저스틴 리브스

1

다음과 같이 명령을 포함하는 파일 인 스크립트를 사용하십시오.

#!/bin/sh

command-01
command-02
...
command-20

첫 번째 줄 (shebang)은을 사용하여 다음 명령을 실행 /bin/sh하고 파일을 실행 가능하게 설정 ( chmod u+x your-little-script) 한 다음에 실행할 수 있습니다 ./my-little-script. 이 방법으로 당신은 약간의 발걸음을 남기지 않을 것입니다 ;-)

쉘 매뉴얼을 읽으십시오. 그것은 완전한 프로그래밍 언어를 제공합니다. bash(1)이것이 가능한지 확인 하거나 Korn 쉘을 확인하십시오 ksh(1). 스크립트에서 제어 흐름을 제어하는 ​​데 유용한 기능을 제공합니다 (또는 그 문제에 대해 대화식으로).


고맙지 만 스크럽을 사용할 수 없습니다.
조나단 라울 타 피아 로페즈

왜? 이것은 경우를 제외하고 어떤 경우에는 매우 : 파시스트 환경, 당신은 스크립트 소스 할 수 있어야한다 source your-little-script(또는 . your-little-script짧게).
vonbrand

Becuase, 나는 유닉스 시스템에 직접 액세스하지 않았다. 미니 프로그램을 좋아해서 라인에서 cmd를 실행하고 비명을 지르며 결과를 얻을 수 있으며,이 명령으로 스크립을 사용하는 것은 실용적이지 않다.
Jonathan Raul Tapia Lopez

자, 그 점이 조금 명확 해집니다 ... 명령의 시작 / 대상 환경은 무엇입니까? 실행 명령을 전달하기 위해 무엇을 사용합니까? 원격 환경이란 무엇입니까? 당신의 설정은 무엇입니까 (일반 계정을 가지고 ssh있거나 통해 액세스 할 수 PuTTY있습니까?
vonbrand

-1

expect로컬 컴퓨터에서 같은 것을 실행 하여 전송 cmd1하기 전에 전송 하고 완료 될 때까지 기다릴 cmd2수 있습니다. 적절한 쓰기를 위해서는 적절한 기간 또는 명령이 완료되었음을 나타내는 특정 출력을 알아 내야합니다. 스크립트를 기대하십시오.

물론 cmd1; cmd2; cmd3; cmd4하나의 명령으로 명령을 차례로 순서대로 실행합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.