Linux
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
在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
複製6
回1
.它也可以通過附加破折號來移動,即
1<&6-
關閉描述符6
並只留下1
.在這兩者之間,您通常會發現寫入 STDOUT 和 STDIN 的操作,例如在子外殼中。
另請參閱:移動文件描述符的實際用途