für Unterbrechungen der Skriptausführung in ZSH

313
Igor Spasic

Ich fühle mich dumm Ich habe ein ZSH-Skript mit zB zwei Dateischleifen, zB:

for f (*aaa*)  for f (*bbb*)  

Das Skript wird beendet, wenn die erste findDatei keine passenden Dateien findet. Ich brauche das Skript, um weiterzuarbeiten.

Was vermisse ich?

3

1 Antwort auf die Frage

5
Adaephon

Wenn für *aaa*einen Fehler keine Übereinstimmung vorliegt, wird standardmäßig ein Fehler gemeldet. Dies ist der Grund, warum Ihr Skript beendet wird.

Um dies zu vermeiden, muss die NULL_GLOBOption gesetzt werden. Anstatt einen Fehler zu melden, wird das Muster einfach aus der Argumentliste entfernt, wenn nichts übereinstimmt.

Es gibt mehrere Möglichkeiten, NULL_GLOB festzulegen:

  • für das gesamte Skript durch Übergeben der -GBefehlszeilenoption an zsh. Dies kann auch auf der Hash-Bang-Zeile erfolgen:
$ zsh -G SCRIPT 
#! / usr / bin / zsh -G für f (* aaa *)  für f (* bbb *)  
  • für alle folgenden Zeilen durch Setzen mit setopt:
setopt NULL_GLOB für f (* aaa *)  für f (* bbb *)  
  • für ein einzelnes Muster mit dem Glob-Qualifikationsmerkmal N:
für f (* aaa * (N))  für f (* bbb *)  
und ich dachte, ich weiß etwas über Zsh ... wow! Diese Antwort ist großartig :) rsm vor 9 Jahren 0