Korzystam z systemu Mac OS X. Próbuję skopiować niektóre pliki za pomocą polecenia cp dla takiego skryptu kompilacji.
cp ./src/*/*.h ./aaa
Ale to polecenie uruchamia błąd, jeśli nie ma pliku .h w katalogu ./src. Jak sprawić, by polecenie nie uruchamiało błędu? (cicha awaria) Błąd powoduje niepowodzenie kompilacji, ale chcę tylko skopiować, gdy jest tylko jakiś plik nagłówkowy.
:
oznacza w tym kontekście.cp
(jeśli jest to pożądane).true
Zamiast tego można użyć wbudowanej powłoki i będzie ona bardziej czytelna.:
- Jaki jest cel wbudowanego GNU Bash `: '(dwukropek)?cp
nie jest wPATH
jakiś sposób ...)Szukasz czegoś w stylu
(Niestety
-f
nie jest to droid, którego szukasz).Jeśli chcesz dopasować glob, to nie zadziała;
find
zamiast tego użyj np .:źródło
set -e
, a plik znika między[
acp
inwokacje, skrypt padnie).Stare pytanie, ale może być nadal istotne dla innych.
Jeśli nie potrzebujesz używać cp, możesz spróbować z rsync.
Aby skopiować wszystkie pliki ze źródła do katalogu docelowego, uruchom:
Rsync jest dostarczany z większością systemów uniksowych, takich jak Linux, Mac OS X lub FreeBSD.
źródło
--ignore-missing-args
:rsync -av --ignore-missing-args ./src/*/*.h ./aaa
Ma to tę zaletę,--ignore-errors
że jedynymi ignorowanymi błędami są te związane z nieistniejącymi plikami źródłowymi. Z--ignore-errors
każdy błąd jest ignorowany, co może być niebezpieczne. Weź również pod uwagę, że ten parametr jest dość nowy, więc może nie być obecny w starych wersjach rsync.Przesłanie wyniku do wartości true zapewnia, że polecenie zawsze się powiedzie. Próbowałem tego na Linuksie, ale nie na żadnym Mac OS:
źródło
|
jest zawsze uruchamiana, podczas gdy||
jest wykonywana tylko w przypadku błędu. Itrue
jest zwykle dwójkowy, podczas gdy dwukropek:
jest wbudowany i nie zużywa PID.Możesz wymusić poprawny status błędu. Z funkcją:
Biorąc pod uwagę następujące kwestie:
Zwykła kopia zwróci błąd. Zwróci status wyjścia 1.
Jeśli użyjemy powyższej funkcji cpalways (), wszelkie błędy zostaną ukryte:
źródło