我有一个执行以下操作的小脚本。我为这个例子简化了它。
set logfile=$HOME/LOG/output.log
find execute.sh -type f -exec csh -c '"$1" >& "$logfile" &' {} \;
问题是find命令没有扩展$logfile
值。相反,它给了我一个错误
logfile: Undefined variable.
我对csh并不熟悉,也没有在相当长一段时间内完成脚本编写,但是有可能逃避这个或以其他方式访问命令中的值吗?
答案 0 :(得分:1)
logfile
不是环境变量,因此在-exec
主数据库启动的shell中不存在。您可以使用setenv
:
setenv logfile "$HOME/LOG/output.log"
或更改引号,以便在将命令传递给$logfile
之前展开csh
。但是,我不清楚应该如何设置$1
。
答案 1 :(得分:0)
[我知道这个问题有多老了,但它仍然出现在搜索的早期] 在普通的C-shell(/ bin / csh和限制语法匹配的仿真器)中,变量设置必须用空格分隔,因此
set logfile = $HOME/LOG/output.log
在Tcsh中,空格是可选的。如果您的脚本是为实现严格的C-shell兼容性而编写的,则第一行最后将一个非常奇怪的变量设置为一个空字符串:在我的Mac上,它应该是logfile=/Users/kelsey/LOG/output.log
=“”。