Ich möchte zum Unterverzeichnis navigieren, in dem die erforderliche Datei vorhanden ist? mit CSH-Skript

Ich möchte zum Unterverzeichnis navigieren, in dem die erforderliche Datei vorhanden ist? mit CSH-Skript
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

cshEs 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 cshvorausgesetzt, dass Sie finddie BSD-Erweiterung unterstützen -execdir(heutzutage sehr verbreitet).

Dasführt ausdie runmeDateien, aber nicht sourcein der aktuellen Shell-Instanz. In jedem Fall sourceerfordert 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.

sourceWenn Sie wirklich auf eine CSH-Datei aus einem CSH-Skript zugreifen müssten, runmewä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 runmeDateien vorhanden sind, deren Pfad Zeilenumbruchzeichen enthält.

verwandte Informationen