2016-06-20 1 views
0

두 개의 .sh 스크립트가 순서대로 실행되어야하는데, 첫 번째에는 사용자가 파일 이름을 입력해야합니다. 둘을 모두 사용하는 단일 .sh 스크립트를 만들기 위해 이들을 결합하려고합니다. 일반적으로 다음과 같이 연속적으로 실행됩니다.먼저 사용자 입력이 필요한 곳에 두 개의 쉘 스크립트를 실행하십시오.

foo.sh input1 input2 
bar.sh > file.csv 

이들은 각각 약 1 시간 정도 소요됩니다. 입력은 다음과 같습니다 있도록 하나의 .sh 스크립트 모두를 실행하는 명령을 할 수있는 방법이 있나요 :

file.csv 
+1

왜'foo.sh $ *; bar.sh> file.csv'? –

답변

0

원래 스크립트 당신이 쓴 경우 출력은

newscript.sh input1 input2 

그것들을 하나의 스크립트로 리팩토링 할 수 있습니다. 그러나 스크립트를 수정하고 싶지 않은 것 같습니다. 대신 두 스크립트의 실행을 래핑하는 스크립트를 만들 수 있습니다.

두 번째 스크립트가 성공하기 위해 첫 번째해야하는 경우 다음 단지의 반환 코드를 확인 두 번째 스크립트를 실행하기 전에 (첫 번째 스크립트가 제대로 오류 시나리오에서이 아닌 0을 반환한다고 가정) 첫 번째 :

#!/bin/bash 

foo.sh $1 $2 
if [ $? -eq 0 ]; then 
    bar.sh > file.csv 
else 
    echo "foo.sh returned with an error. Skippping execution of bar.sh due to error." 
fi 

$1$2은 스크립트의 첫 번째 및 두 번째 매개 변수이며 foo.sh로 리디렉션합니다. 종종 foo.sh를 호출하기 전에 명령 행 입력을 확인하고 처리하는 함수를 작성하고 싶지만 foo.sh가 실행될 때 오류 검사를 신속하게 수행 할 수 있다면 시간이 걸리지 않을 수도 있습니다.

$?은 이전에 실행 된 명령의 반환 코드를 저장하므로 bar.sh를 계속하기 전에 0과 동일한 지 확인합니다.

+1

이것은 다음과 같이 단순화 될 수 있습니다 :'foo.sh $ 1 $ 2 && bar.sh> file.csv || echo "foo.sh가 오류와 함께 반환되었습니다. 오류로 인해 bar.sh의 실행을 건너 뜁니다." – Idloj

관련 문제