일부 소프트웨어를 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>&1
1
파일 설명자(예: STDOUT)의 복사본을 만들고 이를 파일 설명자로 저장합니다6
.exec 1>&6
6
다시 복사하세요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>&1
stderr 출력을 stdout으로 리디렉션할 수 있습니다.
귀하의 bash 예제는 귀하의 스크립트에 제공된 8개의 매개변수를 참조하므로 완전하지 않으므로 $8
여기에는 매개변수 2-7과 같은 내용이 누락되어 있어야 합니다.