Почему мой bash не включает интерактивный флаг для этого скрипта?

Помимо Perl, общий и удобный подход к многострочному редактированию для потоков (и файлов тоже):

Сначала создайте какой-нибудь новый УНИКАЛЬНЫЙ разделитель строк, как вам нравится, например

$ S=__ABC__                     # simple
$ S=__$RANDOM$RANDOM$RANDOM__   # better
$ S=$(openssl rand -hex 16)     # ultimate

Затем в вашей команде sed (или любой другой инструмент) вы заменяете \n на ${S}, например

$ cat file.txt | awk 1 ORS=$S |  sed -e "s/a test${S}Please do not/not a test\nBe/" | awk 1 RS=$S > file_new.txt

( awk заменяет разделитель строк ASCII вашим и наоборот.)

0
21.07.2017, 19:22
2 ответа

[[ -t 0 ]]просто определяет, открыт ли fd0 на (псевдо-)терминале. Поскольку fd0 является стандартным вводом, обычно это так.

0
28.01.2020, 02:25

«Надежный» метод терпит неудачу, потому что «эта оболочка» — это оболочка, в которой выполняется сценарий, которая не является интерактивной, а не оболочка, из которой вы запустили сценарий.

Проверка того, является ли стандартный ввод терминалом ([[ -t 0 ]]), несколько более надежна, но она по-прежнему не определяет, запущен ли скрипт изcron:есть способы запустить скрипт таким образом, чтобы [[ -t 0 ]]завершился успешно, даже если он не запускается из терминала.

Принятый ответ на Проверить, запускается ли скрипт с помощью cron, а не вручную , кажется мне более надежным.

3
28.01.2020, 02:25

Теги

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