我目前正在使用以下行来查找许多脚本并执行它们。脚本命名为:my_script_0.sh,my_script_1.sh等。
find $MY_HOME/SHELL/my_script_[0-9].sh -type f -exec csh -c '"$1" >& "$logfile" &' {} \;
这很好用,但现在我想为每个执行的脚本创建一个唯一的$logfile
。
我意识到使用awk我可以做这样的事情来获取文件的数量,然后可能在日志文件名中使用它。
find $MY_HOME/SHELL/my_script_[0-9].sh -type f | awk -F"\\.|_" '{print $4}'
问题是我不相信我可以使用awk与原始语句,因为我需要位置参数为完整路径/文件名。
理想情况下,我想在find -exec命令中使用另一个位置参数。它存在吗?
答案 0 :(得分:1)
-exec
的{{1}}选项只会占用给定的参数。因为你传递它find
它会启动一个新的shell,你可以选择传递一些参数(一个是csh -c ...
)。然后将这些参数设置为新shell中的位置参数{}
。在这种情况下,$1, $2, $3, ... ,$n
结果将逐个传递,并在shell中用作find
。
我建议使用代替循环的$1
命令的替代方法:
find
foreach script ( $MY_HOME/SHELL/my_script_[0-9].sh )
csh -c "$script >& $script:r.log"
end
删除了它附加的变量的扩展名,因此我们获取了脚本:r
的日志文件:my_script_n.log
。
我在C-shell语法上检查了这些引用: