使用变量将输出定向到不同的文件

时间:2014-07-01 22:18:12

标签: linux bash

我正在尝试使用变量根据一些用户配置设置将程序输出定向到不同的位置。

if [ -f "vars/debug.var" ]; then
   DUMP=''
else
   DUMP='&> logs/dump.log'
fi

...

ping -I eth0 -c 10 www.google.com $DUMP

...

因此,如果文件debug.var存在,DUMP是一个空字符串,但如果它不存在,我想将输出传递给dump.log文件。

我已经尝试了很多不同的变量和命令组合,但没有任何结果......我不断收到错误

ping: unknown host &>

有人有想法吗?或者这是不可能的?

3 个答案:

答案 0 :(得分:2)

eval "ping -I eth0 -c 10 www.google.com $DUMP"

答案 1 :(得分:1)

而不是乱用eval(这是一个安全漏洞)

if [ -f "vars/debug.var" ]; then
   : # nothing
else
   exec &> logs/dump.log
fi
ping -I eth0 -c 10 www.google.com

exec的作用是允许您根据需要重定向输出,并且您可以在子shell (...)中执行此操作以限制重定向的范围。

答案 2 :(得分:0)

这是另一种更安全的变体,允许您拥有任意路径。

DU='&>'
MP='logs/ * /du mp.log'
eval "xargs ping -I eth0 -c 3 www.google.com $DU \"\$MP\""

或者您可以使用数组:

DUMP=('&>' 'logs/ * /du mp.log')
eval "xargs ping -I eth0 -c 3 www.google.com $DUMP \"\${DUMP[1]}\""

你可以这样引用它来保存1个字符

eval "xargs ping -I eth0 -c 3 www.google.com $DUMP "'"${DUMP[1]}"'