if(-f runme ) then
cd `dirname $(find . -iname 'runme')`
chmod +x runme
source runme
cd -
CSH 脚本中是这样吗?
首先,它将在整个子目录中递归搜索 runme 文件,如果存在,那么将转到该文件所在的子目录?
这就是问题——我的逻辑在语法上正确吗?我认为当前的代码将在当前目录中搜索 runme 文件。
我找到了解决方案,所以想在下面分享。我在评论区也提到过。
find . -name "runme" > find_runme.txt
# Just below line used to remove the file name i.e runme here from "find path", and returns only directory path.
set a = `cat find_runme.txt | sed 's/\(.*\/\).*/\1/g'`
if (-z find_runme.txt) then
cd .
else
cd $a
endif
if(-f runme ) then
# cd `dirname $(find . -iname 'runme')`
chmod +x runme
setenv PATH /dv/project/agile/xcelium/test/install/install/tools.lnx86/bin:$PATH
source runme
cd -
答案1
csh
在本世纪没有充分的理由使用它。
不过,在这里我会这样做:
find . -name runme -type f -execdir chmod +x '{}' ';' -execdir '{}' ';'
csh
即使假设您find
支持-execdir
BSD 扩展(现在很常见),它也可以在任何 shell 中工作。
那执行文件runme
,但它不在source
当前 shell 实例中。无论如何,source
ing 不需要执行权限。
无论如何,不,您的代码不是有效的 csh 语法。但是,如果您还不知道 csh 语法,那么好消息是您不需要学习它,因为至少 3 年来人们就知道 csh 中的脚本是有害的,不应该这样做,所以没有人应该这样做期待你这样做。
如果您确实发现自己需要csh 脚本中的 cshsource
文件runme
,而当前工作目录暂时是该文件的父目录,则代码看起来更像是:
foreach file ("`find . -name runme -type f`")
cd $file:h:q || continue
source $file:t:q
cd - || break
end
runme
但请注意,如果路径中包含换行符的文件,它将不起作用。