Что делать>! и >>! делать в тсш - PullRequest
17 голосов
/ 20 июля 2011

При обычном перенаправлении bash > перенаправление стандартного вывода в файл, перезапись, когда он существует, и >> перенаправление стандартного вывода в файл, добавление, когда он существует.

В оболочке tcsh (c)Я нашел операторы >! >>!, которые используются.Что делают эти операторы?У tcsh также есть операторы > и >>, так в чем же разница?

Ответы [ 2 ]

34 голосов
/ 20 июля 2011

В перенаправлении tcsh! Символ означает перезаписать существующий файл, даже если установлено noclobber.

Другими словами, если noclobber установлен, то:

  • cmd > file запишет stdout в файл , если файл не существует
  • cmd > file потерпит неудачу, если файл существует
  • cmd >> file добавит stdout к файлу , если файл существует
  • cmd >> file потерпит неудачу, если файл не существует
  • cmd >! file записывает stdout в файл , перезаписывая любой существующий файл
  • cmd >>! file добавит stdout к файлу , создавая файл, если он еще не существует

Если noclobber равно , а не , установите значение! не имеет никакого эффекта:

  • cmd > file запишет stdout в файл , перезаписав любой существующий файл
  • cmd >> file добавит stdout к файлу
  • cmd >! file записывает stdout в файл , перезаписывая любой существующий файл
  • cmd >>! file добавит stdout к файлу
3 голосов
/ 20 июля 2011

В некоторых случаях восклицательный знак подавляет проверку типа файла, в который выполняется запись.

Цитировать справочную страницу tcsh:

Если установлена ​​переменная оболочки noclobber, то файл не должен существовать или быть символьным специальным файлом (например, терминалом или / dev / null) или результатом будет ошибка Это помогает предотвратить случайное уничтожение файлов. В этом случае формы «!» Могут использоваться для подавления этой проверки.

...