각 쉘 스크립트의 출력을 저장합니다.

각 쉘 스크립트의 출력을 저장합니다.

루프를 반복하는 bash 스크립트가 있습니다. 반복을 기반으로 개별 스크립트의 출력을 bash 파일에 저장하는 방법은 무엇입니까?

#Working directory
cd /lustre/nobackup/WUR/ABGC/agyir001/
    
# Set the number of replicates
num_replicates=100

# Loop over the replicates
for i in $(seq 1 $num_replicates); do
# replicate number with leading zeros
rep_num=$(printf "%03d" $i)

output_file="accuracy_results_${rep_num}.txt"
  
#Run scenario 1,2 and 3 of male contributions

Rscript Scenario_1_male_contributions.R
Rscript Scenario_2_male_contributions.R
Rscript Scenario_3_male_contributions.R

#creating correlated qtl effects for 1000 selected qtls
Rscript Correlated_qtl_effects.R

#Selecting 1000 qtls, creating TBVS and phenotypes
Rscript Breeding_values_and_Phenotypes.R 7500

# prepare phenotypes and genotypes/markers
Rscript /lustre/nobackup/WUR/ABGC/agyir001/scripts/Markers_phenotypes_for_EBV.R

답변1

단일 명령의 출력을 변수 이름의 파일에 저장하려면 output_file일반 리디렉션을 사용할 수 있습니다.

Rscript Scenario_1_male_contributions.R > "$output_file"

또는 stdout 및 stderr을 원하는 경우

Rscript Scenario_1_male_contributions.R > "$output_file" 2>&1

여러 명령의 출력을 동일한 파일에 적용하려면 각 명령에 대한 리디렉션을 추가하고 매번 파일을 자르는 >>대신 추가 모드를 사용해야 합니다.>

그러나 각 리디렉션에 개별적으로 리디렉션을 추가하는 것은 약간 번거로울 수 있으므로 명령 그룹화를 사용할 수 있습니다.

{
Rscript Scenario_1_male_contributions.R
Rscript Scenario_2_male_contributions.R
Rscript Scenario_3_male_contributions.R
} > "$output_file"

여기서는 >전체 그룹에 대해 파일이 한 번만 열리므로 일반 리디렉션이 괜찮습니다. 즉, 이전에 실행한 스크립트의 데이터를 파일에 저장하지 않으려는 경우입니다.


또는 루프의 Rscript동일한 파일에 있는 모든 호출의 출력을 저장합니다 .

for i in $(seq 1 $num_replicates); do
    # replicate number with leading zeros
    rep_num=$(printf "%03d" $i)
    output_file="accuracy_results_${rep_num}.txt"
  
    {
        #Run scenario 1,2 and 3 of male contributions
        Rscript Scenario_1_male_contributions.R
        Rscript Scenario_2_male_contributions.R
        Rscript Scenario_3_male_contributions.R

        Rscript ...
    } > "$output_file"
done

관련 정보