>>는 기존 파일을 덮어쓰지 않고 명령 출력을 추가하는 데 사용된다는 것을 이해하는 다음 bash 스크립트가 있지만 이 경우 무엇을 하고 있습니까? 스크립트는 한 형식에서 다른 형식으로 변환하기 위해 일부 exe 파일을 호출합니다. 각 파일에는 여러 연도가 있으므로 파일 이름을 확인하여 각 파일을 반복합니다. 또한 이 스크립트를 실행하면 "모호한 리디렉션"이 표시됩니다.
#!/bin/bash
source $HOME/.bashrc
jobout=${1}
joberr=${2}
# Set some paths and prefixes
yr_bgn=2000
yr_end=2000
yr=${yr_bgn}
pth_data='/mnt/'
pth_rst='/mnt/'
while [ ${yr} -le ${yr_end} ]
do
./executable1 ${pth_data}file${yr}-${yr}.nc ${yr} ${pth_rst} 1>> ${jobout} 2>> ${joberr}
./executable2 ${pth_data}file${yr}-${yr}.nc ${yr} ${pth_rst} 1>> ${jobout} 2>> ${joberr}
./executable3 ${pth_data}file${yr}-${yr}.nc ${yr} ${pth_rst} 1>> ${jobout} 2>> ${joberr}
let yr=${yr}+1
done
답변1
1>>
2>>
특정 파일 설명자(이 경우 표준 출력(파일 설명자 1) 및 표준 오류(파일 설명자 2))로 리디렉션됩니다 .
따라서 스크립트는 모든 "표준" 메시지를 로 리디렉션 ${jobout}
하고 모든 오류 메시지를 로 리디렉션합니다 ${joberr}
. 두 경우 모두를 사용하면 >>
모든 메시지가 해당 파일에 추가됩니다.
${jobout}
및 는 두 개의 명령줄 인수에서 스크립트에 대한 ${joberr}
값( ${1}
및 ${2}
)을 가져오므로 메시지를 저장하는 데 사용할 파일을 지정해야 합니다. 매개변수가 제공되지 않으면 스크립트는 표시되는 "모호한 리디렉션" 오류 메시지를 생성합니다. 스크립트는 실제로 매개변수가 제공되었는지 확인하고 적절한 오류 메시지를 생성해야 합니다. 그렇지 않으면 다음과 같습니다.
if [ -z "$1" -o -z "$2" ]; then
echo "Log files for standard and error messages must be specified"
echo "${0} msgfile errfile"
exit 1
fi
스크립트 시작 부분에.
답변2
귀하의 경우 1>> 현재 stdout 핸들러의 정보를 ${jobout} 파일에 추가합니다. 2>> 현재 stderr 핸들러의 정보를 ${joberr} 파일에 추가합니다.
jobout 및 joberr은 스크립트의 첫 번째 및 두 번째 매개변수로 정의된 파일입니다.
답변3
매개변수 없이 스크립트가 호출되므로 매개변수 $1
및 $2
가 비어 있으므로 및 도 $jobout
비어 있습니다 $joberr
.
다음과 같이 스크립트를 호출해야 합니다.
./myscript.sh file1 file2