Was bedeutet `1 > >` und `2 > >` in einem Bash-Skript bedeuten?

Ich habe das folgende Bash-Skript, nach meinem Verständnis >> wird die Ausgabe eines Befehls an eine vorhandene Datei angehängt, anstatt sie zu überschreiben, aber was macht es in diesem Fall? Dieses Skript ruft einige exe-Dateien auf, um sie von einem Format in ein anderes zu konvertieren. Es gibt viele Jahre für jede Datei, daher wird jede Datei anhand des Dateinamens durchlaufen. Auch wenn ich dieses Skript ausführe, erhalte ich eine „mehrdeutige Weiterleitung“

#!/bin/bash source $HOME/.bashrc jobout=${1} joberr=${2} # Set some paths and prefixes yr_bgn=2000 yr_end=2000 yr=${yr_bgn} pth_data="/mnt/" pth_rst="/mnt/" while [ ${yr} -le ${yr_end} ] do ./executable1 ${pth_data}file${yr}-${yr}.nc ${yr} ${pth_rst} 1>> ${jobout} 2>> ${joberr} ./executable2 ${pth_data}file${yr}-${yr}.nc ${yr} ${pth_rst} 1>> ${jobout} 2>> ${joberr} ./executable3 ${pth_data}file${yr}-${yr}.nc ${yr} ${pth_rst} 1>> ${jobout} 2>> ${joberr} let yr=${yr}+1 done 

Kommentare

  • Wie geht es Ihnen? Rufen Sie dieses Skript auf?
  • Mögliches Duplikat von Mehrdeutige Weiterleitung erfolgt > $ 2
  • @HaukeLaging, nein, ist es nicht. Die Frage scheint etwas Nahes zu sein, aber nicht dasselbe.
  • @RomeoNinov Würde es Ihnen etwas ausmachen, den relevanten Unterschied zu erklären?
  • @HaukeLaging Das Skript wird in einer .sh-Datei gespeichert. Ich tippe einfach ./myscript.sh

Antwort

1>> und 2>> sind Umleitungen für bestimmte Dateideskriptoren, in diesem Fall die Standardausgabe (Dateideskriptor 1) und den Standardfehler (Dateideskriptor 2).

Also Das Skript leitet alle „Standard“ -Nachrichten an ${jobout} und alle Fehlermeldungen an ${joberr} um. Die Verwendung von >> bedeutet in beiden Fällen, dass alle Nachrichten an die jeweiligen Dateien angehängt werden.

Beachten Sie, dass ${jobout} und ${joberr} übernehmen ihre Werte aus den beiden Befehlszeilenparametern in das Skript (${1} und ${2}) Sie müssen also die Dateien angeben, die Sie zum Speichern der Nachrichten verwenden möchten. Wenn die Parameter nicht angegeben werden, erzeugt das Skript die Fehlermeldung „Mehrdeutige Umleitung“, die Sie gesehen haben. Das Skript sollte wirklich prüfen, ob die Parameter angegeben wurden, und ansonsten eine entsprechende Fehlermeldung ausgeben, z. B.

if [ -z "$1" -o -z "$2" ]; then echo "Log files for standard and error messages must be specified" echo "${0} msgfile errfile" exit 1 fi 

zu Beginn des Skripts.

Antwort

In Ihrem Fall 1 >> hängen Sie die Informationen des aktuellen Standard-Handlers an die Datei $ {jobout} 2 >> an vom aktuellen stderr-Handler zur Datei $ {joberr}

jobout und joberr sind Dateien, die als erster und zweiter Parameter des Skripts

Antwort

Da beim Aufrufen des Skripts keine Parameter vorhanden sind, sind die Parameter $1 und $2 leer $jobout und $joberr.

Sie müssen das Skript folgendermaßen aufrufen:

./myscript.sh file1 file2 

Kommentare

  • Parameternummern haben nichts mit den Zahlen vor >> Umleitungsoperatoren zu tun .
  • Egal, ich sehe, dass Sie ' den Teil über die mehrdeutige Weiterleitung beantworten, nicht die Frage im Titel. Sie sollten Ihre Antwort wahrscheinlich klarer formulieren.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.