bash 스크립트에서`1 >>`와`2 >>`는 무엇을 의미합니까?


15

>> 다음과 같은 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

이 스크립트를 어떻게 부릅니까?
Hauke ​​Laging


@HaukeLaging, 아닙니다. 문제는 가까운 것에 관한 것 같지만 같지 않음
Romeo Ninov

@RomeoNinov 관련 차이점을 설명해 주시겠습니까?
Hauke ​​Laging

@HaukeLaging 스크립트는 .sh 파일로 저장됩니다. 난 그냥 ./myscript.sh 입력
허먼 Toothrot에게

답변:


19

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는 파일이며 스크립트의 첫 번째 및 두 번째 매개 변수로 정의됩니다.


1

스크립트를 호출 할 때 매개 변수가 없으므로 매개 변수 $1$2비어 있으며 $jobout$joberr.

다음과 같이 스크립트를 호출해야합니다.

./myscript.sh file1 file2

매개 변수 번호는 경로 >>재 지정 연산자 이전의 숫자와 관련이 없습니다 .
Barmar

걱정하지 마십시오. 제목의 질문이 아니라 모호한 리디렉션에 대한 부분에 답변하고 있음을 알 수 있습니다. 아마도 이것에 대한 답을 명확하게 만들어야합니다.
Barmar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.