Ich benutze Mac OS X. Ich versuche, einige Dateien mit dem Befehl cp für ein solches Build-Skript zu kopieren.
cp ./src/*/*.h ./aaa
Dieser Befehl löst jedoch einen Fehler aus, wenn sich keine .h-Datei im Verzeichnis ./src befindet. Wie mache ich den Befehl, um den Fehler nicht auszulösen? (Stiller Fehler) Der Fehler führt zum Fehlschlagen des Build-Ergebnisses, aber ich möchte nur kopieren, wenn nur eine Header-Datei vorhanden ist.
:
in diesem Zusammenhang bedeutet.cp
(falls gewünscht). Die eingebaute Shelltrue
könnte stattdessen verwendet werden und wäre besser lesbar.:
- Was ist der Zweck des eingebauten GNU-Bashs ":" (Doppelpunkt)?cp
nicht inPATH
irgendeiner Form vorhanden ...)Sie suchen nach etwas in der Art von
(Leider ist die
-f
Option nicht der Droide, den Sie suchen.)Wenn Sie einen Glob abgleichen möchten, funktioniert das nicht. Verwenden Sie
find
stattdessen zB:quelle
set -e
und die Datei zwischen dem[
und dencp
Aufrufen verschwindet , stürzt Ihr Skript ab).Alte Frage, könnte aber für andere noch relevant sein.
Wenn Sie cp nicht benötigen , können Sie es mit rsync versuchen.
Führen Sie Folgendes aus, um alle Dateien von einer Quelle in ein Zielverzeichnis zu kopieren:
Rsync wird mit den meisten Unix-ähnlichen Systemen wie Linux, Mac OS X oder FreeBSD geliefert.
quelle
--ignore-missing-args
:rsync -av --ignore-missing-args ./src/*/*.h ./aaa
Dies hat den Vorteil,--ignore-errors
dass die einzigen Fehler ignoriert werden, die sich auf nicht vorhandene Quelldateien beziehen. Bei--ignore-errors
jedem Fehler wird ignoriert, was gefährlich sein kann. Berücksichtigen Sie außerdem, dass dieser Parameter relativ neu ist, sodass er in alten Versionen von rsync möglicherweise nicht vorhanden ist.Wenn Sie das Ergebnis auf true setzen, wird sichergestellt, dass der Befehl immer erfolgreich ausgeführt wird. Ich habe es unter Linux versucht, aber unter keinem Mac OS:
quelle
|
wird immer ausgeführt, solange||
dies nur im Fehlerfall erfolgt. Undtrue
ist normalerweise eine Binärdatei, während der Doppelpunkt:
eine eingebaute ist und keine PID verbraucht.Sie können den korrekten Fehlerstatus erzwingen. Mit einer Funktion:
Angesichts der folgenden:
Beim normalen Kopieren wird ein Fehler zurückgegeben. Es wird ein Exit-Status von 1 zurückgegeben.
Wenn wir die obige Funktion cpalways () verwenden, werden alle Fehler ausgeblendet:
quelle