
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 (очень распространенное в наши дни).
Чтовыполняетфайлы , но в текущем экземпляре оболочки их runme
нет . В любом случае, ing не требует разрешения на выполнение.source
source
В любом случае, нет, ваш код не является допустимым синтаксисом csh. Но хорошая новость, если вы пока не знаете синтаксис csh, заключается в том, что вам не нужно его изучать, поскольку уже как минимум 3 десятилетия известно, что скриптование в csh вредно и не должно выполняться, так что никто не должен ожидать, что вы будете это делать.
Если вам действительно нужно получить доступ к source
csh runme
-файлу из csh-скрипта, в то время как текущий рабочий каталог временно является родительским для этого файла, код будет выглядеть примерно так:
foreach file ("`find . -name runme -type f`")
cd $file:h:q || continue
source $file:t:q
cd - || break
end
Однако следует отметить, что это не сработает, если есть runme
файлы, путь к которым содержит символы новой строки.