Jak zastąpić opcję „noclobber” bash?

17

Ta bash noclobberopcja zapobiega zastępowaniu plików przez przekierowanie. Ale czasami naprawdę chcę. cshma podobną opcję i można ją obejść, umieszczając !przed nazwami plików. Czy jest na to jakiś sposób bash?

vy32
źródło

Odpowiedzi:

19

Tak. Dołącz |do operatora przekierowania, aby utworzyć >|. Jest to zawarte w § 3.6.2 podręcznika Bash Reference , qv

Jeśli operatorem przekierowania jest „>”, a opcja noclobber do wbudowanego zestawu została włączona, przekierowanie zakończy się niepowodzeniem, jeśli plik, którego nazwa wynika z rozwinięcia słowa, istnieje i jest plikiem zwykłym. Jeśli operatorem przekierowania jest „> |” lub operatorem przekierowania jest „>”, a opcja noclobber nie jest włączona, nastąpi próba przekierowania, nawet jeśli istnieje plik o nazwie słowo.

Odwiedź ten samouczek na temat opcji noclobber . To może być pomocne.

JdeBP
źródło
3

Użyj |(„potoku”) w bash, zamiast !(„huku”), tak jak byś to zrobił csh. Na przykład:

echo done >| out

Należy pamiętać, że jeśli chcesz przekierować stderrdo stdout i przesłonić noclobber, ani >|&też nie &>|będzie działać; zamiast tego użyj długiego formularza:

cmd-with-errors done >| out 2>&1
Turvalar
źródło
Czy wiesz dlaczego err &>| outnie działa?
Sanghyun Lee