데이터베이스에서 일부 데이터를 가져오기 위한 bash 명령이 포함된 텍스트 파일이 있습니다. 각 명령은 개행 문자로 구분됩니다. 아래 예를 참조하세요. (명령은 "ls -l", "catwhatever.txt" 등일 수도 있습니다.)
prefetch SRR403012
fastq-dump --fasta 0 SRR403012
my_cpp_program.out SRR403012
...
이러한 모든 명령을 실행하는 bash 스크립트를 어떻게 만들 수 있습니까? 나는 명령을 순차적으로 실행하는 것을 원합니다. 하지만! 한 가지 주의할 점은 많은 수의 파일을 가져오고 있으므로 이러한 명령이 종료되기까지 시간이 좀 걸린다는 것입니다. 따라서 for 루프도 실행이 완료될 때까지 기다려야 합니다.
#!/bin/bash
FILENAME="my_commands.txt"
LINES=$(cat $FILENAME)
for LINE in LINES
do
execute $LINE
done
답변1
#!/bin/bash
명령 목록은 shebang( 맨 윗줄) 이 없더라도 실제로는 쉘 스크립트입니다 . 이것을 셸에 대한 인수로 지정할 수 있으며, 셸은 실행이 완료될 때까지 한 번에 한 줄씩 실행합니다.
bash my_commands.txt
또는 명령에 실제로 필요하지 않은 bash
경우
sh my_commands.txt
답변2
bash
스크립트는
- 라인 순서대로 실행
- 당신이하지 않는 한
#!/bin/bash
Hashbang은 파일 자체를 실행 가능하게 만들고 그 뒤에 오는 명령줄을 해석하는 데 어떤 명령이 사용되었는지 표시하려는 경우에만 필요합니다.
그래서 당신이해야 할 일은bash your-command-file
이 "명령 파일"을 확인하십시오. 다른 이름으로 저장 commands1
하고 실행bash commands1
echo -n "Hi, "
sleep 1
echo -n "how "
sleep 1
echo -n "are "
sleep 1
echo "you?"
이것과 비교하십시오 ( commands2
):
echo -n "Hi, " &
sleep 1 &
echo -n "how " &
sleep 1 &
echo -n "are " &
sleep 1 &
echo "you?"
보시다시피 후자의 경우 명령은 백그라운드 프로세스로 전송되어 거의 병렬로 실행됩니다 &
.