`exec 6>&1` 또는 유사한 기능은 무엇을 합니까?

`exec 6>&1` 또는 유사한 기능은 무엇을 합니까?

일부 소프트웨어를 Unix에서 Linux로 마이그레이션하고 있습니다.

다음 스크립트가 있습니다. 이는 파일 전송을 위한 트리거입니다.

명령은 무엇을 합니까 exec?

Linux에서도 실행할 수 있나요?

#!/bin/bash
flog=/mypath/log/mylog_$8.log
pid=$$
flog_otherlog=/mypath/log/started_script_${8}_${pid}.log

exec 6>&1
exec 7>&2
exec >> $flog
exec 2>&1


exec 1>&6 
exec 2>&7

/usr/local/bin/sudo su - auser -c "/mypath/bin/started_script.sh $1 $pid $flog_otherlog $8" 

시작 스크립트는 다음과 같습니다.

#!/bin/bash
flusso=$1
pidpadre=$2
flogcurr=$3
corrid=$4
pid=$$

exec >> $flogcurr
exec 2>&1

if  [ $1 = pippo ] || [ $1 = pluto ] || [ $1 = paperino ]
    then
        fullfile=${myetlittin}/$flusso
        filename="${flusso%.*}"
        datafile=$(ls -le $fullfile  | awk '{print $6, " ", $7, " ", $9, " ", $8 }')
        dimfile=$(ls -le $fullfile  | awk '{print $5 " " }')
        aaaammgg=$(ls -E $fullfile  | awk '{print $6}'| sed 's#-##g')
        aaaamm=$(echo $aaaammgg | cut -c1-6)
        dest_dir=${myetlwarehouse}/mypath/${aaaamm}
        dest_name=${dest_dir}/${filename}_${aaaammgg}.CSV
        mkdir -p $dest_dir
        cp $fullfile $dest_name
        rc_copia=$?
fi

나는 리눅스로 ls -le바꾸고 ls -l --time-style="+%b %d %T %Y"또 바꿀 것이다 ls -E.ls -l --time-style=full-isoand

답변1

exec [n]<&word입력 파일 설명자는 bash에 복사됩니다.

exec [n]>&word출력 파일 설명자는 bash에 복사됩니다.

3.6.8을 참조하세요:https://www.gnu.org/software/bash/manual/html_node/Redirections.html

그러나 매개변수의 순서는 혼란스러울 수 있습니다.

스크립트에서:

  • exec 6>&11파일 설명자(예: STDOUT)의 복사본을 만들고 이를 파일 설명자로 저장합니다 6.

  • exec 1>&66다시 복사하세요 1.

    대시를 추가하여 이동하는 것도 가능합니다. 즉, 1<&6-설명자를 닫고 6유지하기만 하면 됩니다 1.

그 사이에는 일반적으로 서브셸 등에서 STDOUT 및 STDIN에 쓰는 작업이 있습니다.

또한보십시오:파일 설명자 이동의 실제 사용

답변2

exec {number x}>&{number y}파일 설명자 X를 Y에 복사합니다.

파일 설명자 사용법:

  • 0 = 표준 입력
  • 1 = 표준 출력
  • 2 = 표준 오류
  • 3-9 = 추가 파일 설명자

귀하의 경우 fd3를 일부 파일로 설정하는 것과 같이 이전 어딘가에서 열렸어야 합니다 exec 3<> /tmp/some_file.

일반적으로 exec를 실행하여 2>&1stderr 출력을 stdout으로 리디렉션할 수 있습니다.

귀하의 bash 예제는 귀하의 스크립트에 제공된 8개의 매개변수를 참조하므로 완전하지 않으므로 $8여기에는 매개변수 2-7과 같은 내용이 누락되어 있어야 합니다.

관련 정보