我正在使用简单的脚本来自动化ftp。 该脚本如下所示:
ftp -nv $FTP_HOST<<END_FTP user $FTP_USER $FTP_PASS binary mkdir $REMOTE_DIR cd $REMOTE_DIR lcd $LOCAL put $FILE bye END_FTP
但我想pipestDERR到系统日志和STDOUT到一个日志文件。 通常我会这样做: ftp -nv $FTP_HOST 1>>ftp.log | logger<<END_FTP ftp -nv $FTP_HOST 1>>ftp.log | logger<<END_FTP但在这种情况下,由于<<END_FTP ,将<<END_FTP 。 我应该怎样做才能使脚本工作? 请注意,我只想在脚本中redirect来自FTP命令的输出,而不是整个脚本。
磁盘故障检测perl脚本
二进制代码在kern.log和
开源的Syslog守护进程的Windows
rsyslog EscapeControlCharactersOnReceive无法在omfwd模块中工作?
有没有办法将系统日志消息redirect到标准输出?
这可以在不使用临时文件的情况下工作。 2>&1将错误输出发送到标准输出所在的位置 – 这是管道。 标准输出正在进行的变化 – 现在是文件 – 不会改变标准错误发生的地方。 所以,错误去logger和输出到ftp.log 。
ftp -nv $FTPHOST <<END_FTP 2>&1 >> ftp.log | logger user $FTP_USER $FTP_PASS binary mkdir $REMOTE_DIR cd $REMOTE_DIR lcd $LOCAL put $FILE bye END_FTP
怎么样:
exec > mylogfile; exec 2> >(logger -t myftpscript)
在你面前的ftp脚本
执行此I / O重定向的另一种方法是使用{ … }操作,因此:
{ ftp -nv $FTPHOST <<END_FTP >> ftp.log user $FTP_USER $FTP_PASS binary mkdir $REMOTE_DIR cd $REMOTE_DIR lcd $LOCAL put $FILE bye END_FTP # Optionally other commands here...stderr will go to logger too } 2>&1 | logger
当多个命令(而不是所有命令)需要相同的I / O重定向时,这通常是最好的机制。
在上下文中,我认为这个解决方案是最好的(但这是别人的答案,不是我的):
ftp -nv $FTPHOST <<END_FTP 2>&1 >> ftp.log | logger ... END_FTP
为什么不创建一个netrc文件,让它做你的登录和把你的文件。
netrc文件可以让你登录,并允许你定义一个init宏来创建需要的目录,并把你想要的文件放在那里。 大多数ftp命令可以让你指定你想使用的netrc文件,所以你可以使用各种netrc文件来达到各种目的。
machine ftp_host user ftp_user password swordfish macrodef init binary mkdir my_dir cd my_dir put my_file bye
那么,你可以这样做:
$ ftp -v -Nmy_netrc $FTPHOST 2>&1 >> ftp.log | logger
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。