Bash: Ce face „>|”? (Unix, Bash, Redirecționare Io, Țeavă)

jwbensley a intrebat.

Tocmai am văzut acest lucru scris;

$ some-command >| /tmp/output.txt

țevile verticale sunt folosite în redirecționări standard „canalizarea” ieșirii unei comenzi către alta, este >| de fapt complet inutilă, deoarece ar fi același lucru ca și cum ar fi doar > în acest scenariu?

Comentarii

  • Căutați >| la: stackoverflow.com/questions/818255/in-the-bash-shell-what-is-21/… –  > Por F. Hauri.
  • Pentru restul tabloului, vă recomand cu căldură Care sunt operatorii de control și de redirecționare din shell? –  > Por Wildcard.
1 răspunsuri
D_Bye

Nu este inutil – este o formă specializată a simplu > operator de redirecționare (și, poate în mod confuz, nu are nimic de-a face cu țevile). bash și majoritatea celorlalte shell-uri moderne au o opțiune noclobber, , care împiedică redirecționarea să suprascrie sau să distrugă un fișier care există deja. De exemplu, dacă noclobber este adevărată, iar fișierul /tmp/output.txt există deja, atunci această operațiune ar trebui să eșueze:

$ some-command > /tmp/output.txt

Cu toate acestea, puteți înlocui în mod explicit setarea lui noclobber cu opțiunea >| operatorul de redirecționare – redirecționarea va funcționa, chiar dacă noclobber este setată.

Puteți afla dacă noclobber este setată în mediul dvs. curent cu set -o.

Pentru nota istorică, atât opțiunea „noclobber”, cât și funcțiile de ocolire ale acesteia provin de la csh (sfârșitul anilor ’70). ksh a copiat-o (începutul anilor ’80), dar a folosit >| în loc de >!. POSIX a specificat opțiunea ksh (astfel încât toate shell-urile POSIX, inclusiv bash, derivatele mai noi ale lui ash, utilizate ca sh pe unele sisteme, o acceptă). Zsh suportă ambele sintaxe. Nu cred că a fost adăugată la nicio variantă de shell Bourne, dar s-ar putea să mă înșel.

Comentarii

  • @sch – referitor la nota ta istorică (mulțumesc pentru informațiile suplimentare, btw) – FreeBSD’s sh are noclobber, , începând cu aproximativ din mai 2002. –  > Por D_Bye.