Her*_*rot 18 bash io-redirection shell-script
我有以下 bash 脚本,据我所知 >> 用于将命令的输出附加到现有文件而不是覆盖,但在这种情况下它在做什么?该脚本正在调用一些 exe 文件以从一种格式转换为另一种格式。每个文件都有很多年,所以它通过查看文件名来循环每个文件。此外,当我运行此脚本时,我得到“模糊重定向”
#!/bin/bash
source $HOME/.bashrc
jobout=${1}
joberr=${2}
# Set some paths and prefixes
yr_bgn=2000
yr_end=2000
yr=${yr_bgn}
pth_data='/mnt/'
pth_rst='/mnt/'
while [ ${yr} -le ${yr_end} ]
do
./executable1 ${pth_data}file${yr}-${yr}.nc ${yr} ${pth_rst} 1>> ${jobout} 2>> ${joberr}
./executable2 ${pth_data}file${yr}-${yr}.nc ${yr} ${pth_rst} 1>> ${jobout} 2>> ${joberr}
./executable3 ${pth_data}file${yr}-${yr}.nc ${yr} ${pth_rst} 1>> ${jobout} 2>> ${joberr}
let yr=${yr}+1
done
Run Code Online (Sandbox Code Playgroud)
Ste*_*itt 22
1>>
和2>>
是特定文件描述符的重定向,在这种情况下是标准输出(文件描述符 1)和标准错误(文件描述符 2)。
所以脚本将所有“标准”消息重定向${jobout}
到${joberr}
. >>
在这两种情况下使用意味着所有消息都附加到各自的文件中。
请注意,${jobout}
并${joberr}
采取从两个命令行参数,它们的值到脚本(${1}
和${2}
),所以你需要指定要用于存储信息的文件。如果未提供参数,脚本将产生您所看到的“模糊重定向”错误消息;脚本应该真正检查是否提供了参数,否则会产生适当的错误消息,例如
if [ -z "$1" -o -z "$2" ]; then
echo "Log files for standard and error messages must be specified"
echo "${0} msgfile errfile"
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
在脚本的开头。