Подтвердить что ты не робот

Что делать>! и >>! делать в tcsh

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

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

4b9b3361

Ответ 1

В 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 к файлу

Ответ 2

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

Чтобы процитировать страницу tcsh man:

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