`1 > >`및`2 > `는 bash 스크립트에서 의미합니까?

내가 이해하는 바에 따르면 다음 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 

댓글

  • 어떻게 이 스크립트를 호출 하시겠습니까?
  • 불명확 한 리디렉션 완료 > $ 2
  • 의 중복 가능성

  • @HaukeLaging, 아닙니다. 질문은 가까운 것에 관한 것 같지만 같지는 않습니다
  • @RomeoNinov 관련 차이점을 설명해 주시겠습니까?
  • @HaukeLaging 스크립트는 .sh 파일에 저장됩니다. ./myscript.sh

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 

주석

  • 매개 변수 번호는 >> 리디렉션 연산자 앞의 번호와 관련이 없습니다. .
  • 괜찮습니다. ' 제목에있는 질문이 아니라 모호한 리디렉션에 대한 부분에 답변 해 주셨습니다. 이에 대해 더 명확하게 대답해야합니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다