Что делает> filename.txt в сценарии оболочки

Хотя это возможно с GNU sed с такими вещами, как:

sed -E 's/^#([0-9]+).*$/date -d @\1/e'

Это было бы ужасно неэффективно (и легко ввести произвольную команду инъекции уязвимостей 1 ), поскольку это означало бы запуск одной оболочки и одной команды date для каждой #xxxx строки, практически как плохо, как оболочка ] при чтении цикла . Здесь было бы лучше использовать такие вещи, как perl или gawk , то есть утилиты обработки текста со встроенными возможностями преобразования даты:

perl  -MPOSIX -pe 's/^#(\d+).*/ctime $1/se'

Или:

gawk '/^#/{$0 = strftime("%c", substr($0, 2))};1'

1 Если бы мы написали ^ # ([0-9]). * вместо ^ # ([0-9]). * $ (как я делал ранее версия этого ответа), затем в многобайтовых локали, таких как UTF-8 (норма в настоящее время), с вводом типа # 1472047795 ; reboot , где это - это байтовое значение 0x80, которое не является допустимым символом, поэтому команда s завершилась бы выполнением date -d @ 1472047795 ; перезагрузите, например, . В то время как с дополнительным $ , эти строки не будут заменены.Альтернативный подход: s / ^ # ([0-9]) / date -d @ \ 1 # / e , то есть оставить часть после даты #xxx . как комментарий оболочки

2
23.03.2017, 03:46
5 ответов

Как вы написали с ничем перед символом перенаправления > :

>filename.txt

буквально перенаправляет ничего в имя файла. txt . Обычно это делается для очистки / стирания содержимого текстового файла. Если filename.txt еще не существует, он будет создан.

4
27.01.2020, 21:51

Команда > myfile.txt просто создаст файл или очистит содержимое файла, если таковое имеется.

Эта команда также предназначена для приписывания чего-либо файлу .txt, если перед этим была команда. Например, вы хотите создать файл с содержимым папки, поэтому вы можете выполнить ls -1 > myfile.txt. Это создаст файл с именами ваших файлов и каталогов по строкам.

Вы также можете использовать его в качестве лог-файла вашего скрипта, поэтому вместо того, чтобы показывать вывод на экране, эта команда сохранит вывод в файл.

2
27.01.2020, 21:51

Нет такой команды, как filename.txt. Это всего лишь текстовый файл с именем filename.

Как вы спросили в заголовке

Что делает> filename.txt в сценарии оболочки

«>» используется для перенаправления вывода команды в текстовый файл. например, если вы запустите следующую команду в терминале

ifconfig > filename.txt

, то вывод команды ifconfig не будет отображаться в терминале. но новый файл будет создан в вашем рабочем каталоге или перезаписан, если тот же файл присутствует там. Вы можете прочитать вывод команды из файла filename.txt.

1
27.01.2020, 21:51

script.sh> file.txt перезаписывает файл выводом сценария. Принимая во внимание, что сценарий. sh >> file.txt добавляет текст в конец файла.

Вы можете перенаправить любой вывод любой программы в командной строке в такой файл. Однако это перенаправляет только STDOUT, если вы также хотите, чтобы в файле были ошибки, используйте что-то вроде script.sh> file.txt 2> & 1 . Это отправляет STDERR в STDOUT, который записывается в файл.

1
27.01.2020, 21:51

По сути, он хранит вывод этой команды. Например. с

ls -ltr > command.txt

вывод ls -ltrбудет сохранен в command.txt.

0
14.10.2020, 06:12

Теги

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