루프를 반복하는 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