csh脚本变量替换

时间:2013-09-27 16:12:47

标签: linux shell csh

我有一个执行以下操作的小脚本。我为这个例子简化了它。

set logfile=$HOME/LOG/output.log
find execute.sh -type f -exec csh -c '"$1" >& "$logfile" &' {} \;

问题是find命令没有扩展$logfile值。相反,它给了我一个错误

logfile: Undefined variable.

我对csh并不熟悉,也没有在相当长一段时间内完成脚本编写,但是有可能逃避这个或以其他方式访问命令中的值吗?

2 个答案:

答案 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 =“”。