필수 파일이 있는 하위 디렉터리로 이동하고 싶습니다. 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 '{}' ';'

BSD 확장(요즘 매우 일반적임)을 지원한다고 csh가정 하더라도 모든 셸에서 작동합니다 .find-execdir

저것실행하지만 현재 쉘 인스턴스에는 해당 파일 runme이 없습니다 . source어떤 경우에도 sourceing에는 실행 권한이 필요하지 않습니다.

어쨌든 아니요, 귀하의 코드는 유효한 csh 구문이 아닙니다. 그러나 csh 구문을 아직 모른다면 좋은 소식은 그것을 배울 필요가 없다는 것입니다. 왜냐하면 csh의 스크립팅은 해롭고 수행해서는 안 된다는 것이 적어도 30년 동안 알려져 왔기 때문입니다. 당신이 그렇게 하기를 기대합니다.

source현재 작업 디렉터리가 일시적으로 해당 파일의 상위 디렉터리인 동안 csh 스크립트 내에서 csh 파일 이 필요한 경우 runme코드는 다음과 같습니다.

foreach file ("`find . -name runme -type f`")
  cd $file:h:q || continue
  source $file:t:q
  cd - || break
end

runme하지만 경로에 개행 문자가 포함된 파일이 있으면 작동하지 않습니다 .

관련 정보