我想导航到需要文件存在的子目录?使用CSH脚本

我想导航到需要文件存在的子目录?使用CSH脚本
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支持-execdirBSD 扩展(现在很常见),它也可以在任何 shell 中工作。

执行文件runme,但它不在source当前 shell 实例中。无论如何,sourceing 不需要执行权限。

无论如何,不​​,您的代码不是有效的 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但请注意,如果路径中包含换行符的文件,它将不起作用。

相关内容