파일의 각 줄을 자체 하위 쉘에서 실행해야 합니다.

파일의 각 줄을 자체 하위 쉘에서 실행해야 합니다.

잘 작동하지만 시리즈별로 실행되는 스크립트가 있습니다.

스크립트가 텍스트 파일의 각 줄을 가져와 서브셸에서 해당 줄을 실행/생성한 후 다음 줄로 이동하는 등의 작업을 수행하기를 원합니다.

두 가지 이유 때문에 서브셸이 필요합니다.
첫째, 작업을 직렬이 아닌 병렬로 실행하여 더 빠르게 실행하기 위해서입니다.
둘째, 주어진 명령의 출력을 모니터링하고 원격 시스템에서 종료 코드를 반환합니다.

내가 어떻게 할 수 있는지 아는 사람 있나요?

약간의 배경 지식으로, 텍스트 파일의 각 줄은 옵션, 사용자 입력 및 다른 입력 파일에서 수집된 기능을 사용하여 원격 시스템에서 실행되는 ssh 명령 모음이므로 스크립트에 의해 생성된 출력의 각 줄은 독립 실행형 서버 명령입니다. .

action 을 통해 스크립트를 호출합니다 /bin/bash $temp_file.

예제 스크립트는 다음과 같습니다.

sshpass -p <PASSWORD> ssh -o StrictHostKeyChecking=no -p 22 [email protected]  'cat /etc/hostname  ;echo 'START';echo `date +%Y-%m-%d` ; echo <PASSWORD> |sudo -S yum update -y; cat /etc/hostname ;echo 'FINISH';echo `date +%Y-%m-%d` ;echo '';echo ''

이것은 단지 예일 뿐이며 실행할 명령(예: yum update -y여기에서 에코 및 날짜와 함께 사용하는 명령)은 단일 명령으로 대체되거나 or로 ;구분됩니다 .$$

해당 줄에 문제를 일으킬 수 있는 문자가 많이 있다는 것을 알고 있습니다.

답변1

GNU Parallel은 다음을 위해 만들어졌습니다:

parallel --joblog my.log < myfile.sh

--sshlogin/--sshloginfile, --jobs N, --tag및 도 유용 --linebuffer할 수 있습니다 . --nonall어떤 작업이 관련되어 있는지 확인하려면 실행하려는 원격 작업에 대한 추가 정보를 공개해야 합니다.

답변2

각 줄을 읽고 eval이를 평가하는 데 사용하면 됩니다.

IFS=""
while read -r line; do
   eval "( $line )"
done < command_file

요청한 최소한의 작업을 수행하십시오. 즉, 각 줄을 서브셸에서 실행하는 것입니다.

관련 정보