
if(-f runme ) then
cd `dirname $(find . -iname 'runme')`
chmod +x runme
source runme
cd -
Gilt dies für CSH-Skripte?
Zuerst wird rekursiv in allen Unterverzeichnissen nach der Runme-Datei gesucht, und wenn sie vorhanden ist, wird dann in das Unterverzeichnis gewechselt, in dem diese Datei liegt.
Dies ist die Frage - ist meine Logik syntaktisch richtig? Ich denke, der vorliegende Code sucht nach der Runme-Datei im vorliegenden Verzeichnis.
Ich habe eine Lösung gefunden und dachte, ich teile sie unten. Ich habe sie auch in einem Kommentarbereich erwähnt.
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 -
Antwort1
csh
Es gibt in diesem Jahrhundert keinen guten Grund mehr, es zu konsumieren .
Hier würde ich allerdings Folgendes tun:
find . -name runme -type f -execdir chmod +x '{}' ';' -execdir '{}' ';'
Das würde in jeder Shell funktionieren, selbst csh
vorausgesetzt, dass Sie find
die BSD-Erweiterung unterstützen -execdir
(heutzutage sehr verbreitet).
Dasführt ausdie runme
Dateien, aber nicht source
in der aktuellen Shell-Instanz. In jedem Fall source
erfordert ing keine Ausführungsberechtigung.
In jedem Fall ist Ihr Code keine gültige CSH-Syntax. Aber die gute Nachricht, wenn Sie die CSH-Syntax noch nicht kennen, ist, dass Sie sie nicht lernen müssen, da seit mindestens 3 Jahrzehnten bekannt ist, dass Skripting in CSH schädlich ist und nicht durchgeführt werden sollte, also sollte niemand von Ihnen erwarten, dies zu tun.
source
Wenn Sie wirklich auf eine CSH-Datei aus einem CSH-Skript zugreifen müssten, runme
während das aktuelle Arbeitsverzeichnis vorübergehend das übergeordnete Verzeichnis dieser Datei ist, würde der Code eher folgendermaßen aussehen:
foreach file ("`find . -name runme -type f`")
cd $file:h:q || continue
source $file:t:q
cd - || break
end
Beachten Sie jedoch, dass es nicht funktioniert, wenn runme
Dateien vorhanden sind, deren Pfad Zeilenumbruchzeichen enthält.