Linux

exec 6>&1 或類似的有什麼作用?

  • December 30, 2021

我正在將一些軟體從 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在Linux 中ls -l --time-style="+%b %d %T %Y"進行ls -E更改。ls -l --time-style=full-isoand

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複製61.

它也可以通過附加破折號來移動,即1<&6-關閉描述符6並只留下1.

在這兩者之間,您通常會發現寫入 STDOUT 和 STDIN 的操作,例如在子外殼中。

另請參閱:移動文件描述符的實際用途

引用自:https://unix.stackexchange.com/questions/684171