一部のソフトウェアを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
私はLinuxに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
ありません。