하나의 스크립트에서 여러 프로그램을 실행하는 방법은 무엇입니까?

하나의 스크립트에서 여러 프로그램을 실행하는 방법은 무엇입니까?

차례로 실행하고 싶은 프로그램이 6개 정도 있습니다. 이들은 모두 서로 다른 디렉토리에 있으며 자체 데이터를 가지고 있습니다. 각 프로그램을 특정 순서로 실행하는 데 사용할 수 있는 스크립트에 대한 도움이 필요합니다.

이전 실행의 출력이 다음 실행의 입력이 되기 때문입니다.

답변1

프로그램을 "체인"하는 방법에는 두 가지가 있습니다. 첫 번째 출력이 두 번째 출력으로 전달되도록 이들을 함께 연결하려는 경우 파이프라는 것을 사용해야 합니다. 또 다른 방법은 단순히 프로그램을 하나씩 실행하는 것입니다.

파이프라인 예시

여기서는 첫 번째 명령의 출력을 가져와 |두 번째 명령으로 파이프( )합니다.

$ echo "output from 1" | grep 1
output from 1

명령의 출력이 화면에 표시됩니다 grep.

시리즈 명령 예

여기서는 하나의 명령을 실행한 다음 다른 명령을 실행합니다.

#!/bin/bash

echo 1
echo 2

위의 내용을 이라는 파일에 넣고 mycmds.bash실행 가능하게 만든 후 실행합니다.

$ chmod +x mycmds.bash
$ ./mycmds.bash
1
2

당신은 또한 사용할 수 있습니다서브쉘원하는 경우 프롬프트에서 일련의 명령을 실행하고 해당 출력을 파일에 캡처할 수 있습니다. 위의 쉘 스크립트 방법과 동일한 방식으로 명령이 실행됩니다.

명령을 실행하면 됩니다.

$ (echo 1; echo 2; echo 3)
1
2
3

그들의 결과물을 포착하라

$ (echo 1; echo 2; echo 3) | grep 3
3

출력을 파일로 캡처

$ (echo 1; echo 2; echo 3) | tee mycmds.log
1
2
3

$ cat mycmds.log 
1
2
3

답변2

첫 번째 줄에 첫 번째 프로그램을 작성합니다.

두 번째 줄에 두 번째 프로그램을 작성합니다.

당신은 그것을 반복합니다.

답변3

귀하의 질문은 이해하기 어렵습니다. 를 찾습니까관로?

당신이 쓴다면

program1 --option1 | program2 --option2

그러면 명령의 출력이 program1 --option1명령에 대한 입력으로 사용됩니다 program2 --option2.

이 방법으로 두 개 이상의 프로그램을 연결할 수 있습니다. 줄이 너무 길면 각 파이프 기호 뒤에 개행 문자를 추가할 수 있습니다.

pre-treatment file1.input file2.input file3.input |
some-processing --option=value --other-option |
more-processing |
analyze this --and that |
grep 'interesting stuff'    

바라보다STDOUT과 STDIN을 연결한다는 것은 무엇을 의미합니까?파이프 비유에 대한 직관적인 설명.

관련 정보