
if(-f runme ) then
cd `dirname $(find . -iname 'runme')`
chmod +x runme
source runme
cd -
¿ES ESTO CIERTO EN CSH SCRIPT?
Primero, buscará el archivo runme de forma recursiva en los subdirectorios y, si está presente, irá al subdirectorio donde existe este archivo.
Ésta es la pregunta: ¿mi lógica es correcta sintácticamente? Creo que el código actual buscará el archivo runme en el directorio actual.
Encontré una solución, así que pensé en compartirla a continuación. También lo he mencionado en una sección de comentarios.
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 -
Respuesta1
No hay ninguna buena razón para consumir csh
en este siglo.
Aquí, sin embargo, haría:
find . -name runme -type f -execdir chmod +x '{}' ';' -execdir '{}' ';'
Lo cual funcionaría en cualquier shell, incluso csh
suponiendo que find
admita la -execdir
extensión BSD (muy común en estos días).
Esoejecutalos runme
archivos, aunque no source
los incluye en la instancia de shell actual. En cualquier caso, source
ing no requiere permiso de ejecución.
En cualquier caso, no, su código no tiene una sintaxis csh válida. Pero la buena noticia, si aún no conoce la sintaxis de csh, es que no necesita aprenderla, porque se sabe desde hace al menos 3 décadas que las secuencias de comandos en csh son dañinas y no deben realizarse, por lo que nadie debería hacerlo. esperando que lo hagas.
Si realmente necesita source
un runme
archivo csh desde un script csh mientras el directorio de trabajo actual es temporalmente el padre de ese archivo, el código se parecería más a:
foreach file ("`find . -name runme -type f`")
cd $file:h:q || continue
source $file:t:q
cd - || break
end
Aunque tenga en cuenta que no funcionará si hay runme
archivos cuya ruta contenga caracteres de nueva línea.