
if(-f runme ) then
cd `dirname $(find . -iname 'runme')`
chmod +x runme
source runme
cd -
ISSO É VERDADEIRO NO SCRIPT CSH?
Primeiro, ele procurará o arquivo runme recursivamente em todos os subdiretórios e, se estiver presente, irá para o subdiretório onde esse arquivo existe?
Esta é a questão - minha lógica está correta sintaticamente? Acho que o código atual irá pesquisar o arquivo runme no diretório atual.
Eu encontrei uma solução, então pensei em compartilhá-la abaixo. Eu também mencionei em uma seção de comentários.
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 -
Responder1
Não há nenhuma boa razão para usar csh
neste século.
Aqui, porém, eu faria:
find . -name runme -type f -execdir chmod +x '{}' ';' -execdir '{}' ';'
O que funcionaria em qualquer shell, mesmo csh
assumindo que você find
suporte a -execdir
extensão BSD (muito comum hoje em dia).
Queexecutaos runme
arquivos, mas isso não acontece source
na instância atual do shell. De qualquer forma, source
ing não requer permissão de execução.
De qualquer forma, não, seu código não tem sintaxe csh válida. Mas a boa notícia, se você ainda não conhece a sintaxe do csh, é que não precisa aprendê-la, porque é sabido há pelo menos 3 décadas que scripts em csh são prejudiciais e não devem ser feitos, então ninguém deveria ser esperando que você faça isso.
Se você realmente precisasse de source
um runme
arquivo csh dentro de um script csh enquanto o diretório de trabalho atual é temporariamente o pai desse arquivo, o código seria mais parecido com:
foreach file ("`find . -name runme -type f`")
cd $file:h:q || continue
source $file:t:q
cd - || break
end
Porém, observe que não funcionará se houver runme
arquivos cujo caminho contenha caracteres de nova linha.