Как перезаписать файл в оболочке, используя < и > для того же файла?

В Linux или любой системе, использующей GNUdate:

$ thedate=2019-08-15
$ date -d "$thedate" +'%B %e, %Y'
August 15, 2019

В macOS, OpenBSD и FreeBSD, где GNU dateнедоступен по умолчанию:

$ thedate=2019-08-15
$ date -j -f '%Y-%m-%d' "$thedate" +'%B %e, %Y'
August 15, 2019

Опция -jотключает настройку системных часов, а строка формата, используемая с -f, описывает формат ввода даты. (должна быть строкой формата strptime(3), описывающей формат, используемый значением вашей переменной ). Затем следует значение вашей переменной, и формат, который вы хотите, чтобы ваш вывод был в (, должен быть строкой форматаstrftime(3)).

Пользователи NetBSD могут использовать что-то похожее на описанное выше, но без опции -f input_fmt, так как их реализация dateиспользуетparsedate(3). Обратите также внимание на параметр -dдля указания строки ввода даты :

.

$ thedate=2019-08-15
$ date -j -d "$thedate" +'%B %e, %Y'
August 15, 2019

См. также руководство для dateвашей системы.

1
16.09.2021, 21:39
1 ответ

Вы можете сделать это:

(rm -f foo && yourprogram > foo) < foo

.:

(rm -f foo && wc > foo) < foo

Открывает fooдля чтения. Затем он запускает подоболочку и удаляет узел i -из foo, оставляя файл открытым. Наконец, он открывает fooдля вывода, создавая таким образом foo.

Требуется разрешение на запись в каталог, поэтому, если у вас есть разрешение только на запись в файл, вам не повезло.

Это изменит узел i -(, поэтому разрешение, владелец, ctime будут потеряны ), но если важно только имя, все должно быть в порядке.

В отличие от spongeэто работает, даже если результат yourprogramбольше памяти.

5
17.09.2021, 19:54

Теги

Похожие вопросы