내가 이해하는 바에 따르면 다음 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
댓글
Answer
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
와 같은 적절한 오류 메시지를 생성해야합니다.
Answer
귀하의 경우 1 >> 현재 stdout 핸들러의 정보를 $ {jobout} 파일에 추가합니다. 2 >> 정보를 추가합니다. 현재 stderr 핸들러에서 $ {joberr} 파일로
jobout 및 joberr은 스크립트의 첫 번째 및 두 번째 매개 변수로 정의 된 파일입니다.
Answer
스크립트를 호출 할 때 매개 변수가 없기 때문에 매개 변수 $1
및 $2
는 비어 있습니다. $jobout
및 $joberr
.
스크립트를 다음과 같이 호출해야합니다.
./myscript.sh file1 file2
주석
- 매개 변수 번호는
>>
리디렉션 연산자 앞의 번호와 관련이 없습니다. . - 괜찮습니다. ' 제목에있는 질문이 아니라 모호한 리디렉션에 대한 부분에 답변 해 주셨습니다. 이에 대해 더 명확하게 대답해야합니다.
의 중복 가능성