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
BSD 확장(요즘 일반적임)을 지원한다고 가정하더라도 -execdir
모든 셸에서 작동합니다.
저것구현하다file 이지만 현재 쉘 인스턴스에는 runme
없습니다 . source
어쨌든 source
ing에는 실행 권한이 필요하지 않습니다.
어쨌든, 아니요, 귀하의 코드는 유효한 csh 구문이 아닙니다. 그러나 csh 구문을 아직 모른다면 좋은 소식은 그것을 배울 필요가 없다는 것입니다. 왜냐하면 사람들은 csh의 스크립팅이 해롭고 수행해서는 안 된다는 것을 적어도 3년 동안 알고 있었기 때문입니다. 당신이 그것을 기대해야합니다.
csh 스크립트 내에서 csh source
파일이 필요하고 runme
현재 작업 디렉터리가 일시적으로 파일의 상위 디렉터리인 경우 코드는 다음과 같습니다.
foreach file ("`find . -name runme -type f`")
cd $file:h:q || continue
source $file:t:q
cd - || break
end
runme
그러나 경로에 파일에 개행 문자가 포함되어 있으면 작동하지 않습니다.