2012-10-26 30 views
1

我的bash/nohup体验非常有限,所以我可能会犯一个基本错误。在bash脚本中运行nohup时出错

我正在启动后台文件监视器。 (如果它很重要,Sass是一个CSS预处理器,它可以监视源文件,并在检测到更改时自动将它们编译为CSS。)

当我在shell提示符处输入此内容时,它将完美启动Sass文件监视器:

nohup sass --watch /data/sass/:/data/css/ > /var/log/sass.out 2> /var/log/sass.err & 

但是,当我把它放在这样一个脚本(调试简化示例脚本):

COMMAND="[exactly the same command as above]" 
echo `$COMMAND` 

我得到这个错误:

nohup: ignoring input and redirecting stderr to stdout 
Errno::ENOENT: No such file or directory - > Use --trace for backtrace. >>> 
Sass is watching for changes. Press Ctrl-C to stop. 

如果指定完整路径/ usr/bin/local/sass,则会发生同样的情况。任何想法,我要去哪里错了?

回答

2

您不能运行通过复杂的命令(例如,具有重定向):

echo `$COMMAND` 

你真的只能这样做,如果你正在运行一个简单的二进制或脚本。 你$COMMAND需要被执行前适当扩大,所以你需要运行:

echo `eval $COMMAND` 
+0

这将重定向工作,但如果任何参数包含空格 – jordanm

+0

将无法​​正常工作你是什么意思?这对我有用:'cmd =“echo'嗨,这里是空格'>/tmp/test_eval”; eval $ cmd; cat/tmp/test_eval' =>嗨,这里有空格 – ndbroadbent

+0

太棒了。它的工作原理与现在一样。感谢您及时的回复。 –