bash init脚本 - 模糊重定向

时间:2014-06-06 11:06:21

标签: linux bash

我正在尝试从init脚本执行hadoop作业并输出到日志文件。命令如下

log_file="/home/hadoop/log_`date +%Y%m%d-%H:%M:%S`.log"
echo $log_file
su - hadoop -c 'java -jar /home/hadoop/testing.jar > $log_file'

但我一直在-bash: $log_file: ambiguous redirect

我的陈述有什么问题?

1 个答案:

答案 0 :(得分:3)

问题是您在命令周围使用单引号,因此变量$log_file未被扩展。

修改

正如William Pursell's comment所阐明的那样,$log_file 正在被扩展但是由错误的shell扩展。请参阅此示例(我使用set -x来显示正在评估的命令):

$ log_file="/dir/file.log"
$ set -x
$ su - -c 'set -x; echo $log_file'     
+ su - -c 'set -x; echo $log_file'     # no expansion of $log_file yet
+ echo                                 # expansion here, no variable $log_file

$ su - -c "set -x; echo $log_file"
+ su - -c 'set -x; echo /dir/file.log' # expansion here, $log_file exists
+ echo /dir/file.log
/dir/file.log

溶液

请尝试使用双引号,以便在正确的位置展开$log_file

su - hadoop -c "java -jar /home/hadoop/testing.jar > $log_file"