Терминалы отличаются от других форм ввода-вывода, и эмулятор терминала должен представлять себя как терминал.
Терминал (включая псевдотерминал) имеет определенные атрибуты, такие как длина строки и поддерживаемые управляющие последовательности. Программы могут запрашивать их, например, в общем случае ls
определит, идет ли его вывод на терминал, а затем настроит свои цвета и табуляцию в соответствии с терминалом.
Вы можете проверить это: ls | cat
не даст вам отдельных колонок. Псевдотерминал используется для передачи соответствующих значений для эмулятора терминала.
В качестве другого примера, такие программы, как sudo
и ssh
, в целях безопасности будут считывать пароль из терминала напрямую, вы не можете передать их по трубе.
Терминалы используются для управления процессами. Если вы нажмете ^C
, терминал отправит SIGINT
в свой процесс переднего плана. Это работа терминала. Это означает, что для того, чтобы такие вещи, как ^C
работали, должен существовать терминал.
Аналогично, если положить трубку на терминал (или в современной системе закрыть окно эмулятора терминала), то все процессы, связанные с ним, пошлют SIGHUP
.
Псевдотерминал справляется с этим, пара труб - нет.
Вообще, все процессы, кроме демонов, имеют управляющий терминал. Вы можете использовать ps
, чтобы узнать, какие процессы принадлежат каким терминалам.
sed подход:
sed -i 's/^\(SUT_INST_EXAMPLES\|SUT_INST_PING\)=false/\1=true/' file
файл
содержимое:
SUT_INST_PIT=true
SUT_INST_TICS=true
SUT_INST_EXAMPLES=true
SUT_INST_PING=true
\(SUT_INST_EXAMPLES\|SUT_INST_PING\)
- группа чередования, соответствует либо SUT_INST_EXAMPLES
ИЛИ SUT_INST_PING
в начале строки
Альтернативный gawk (GNU awk) подход:
gawk -i inplace -F'=' -v OFS='=' '$1~/^SUT_INST_(EXAMPLES|PING)/{$2=($2=="false")? "true":"false"}1' file
sed
позволяет вам выполнять несколько операций в каждой строке:
sed -e '...' -e '...' file
Таким образом, вы можете по крайней мере объединить два ваших вызова sed
в один с помощью
sed -i -e 's/^SUT_INST_EXAMPLES=false/SUT_INST_EXAMPLES=true/' \
-e 's/^SUT_INST_PING=false/SUT_INST_PING=true/' file
To параметризовать замену, использовать переменные:
examples="true"
ping="false"
sed -i -e "s/^SUT_INST_EXAMPLES=.*\$/SUT_INST_EXAMPLES=$examples/" \
-e "s/^SUT_INST_PING=.*\$/SUT_INST_PING=$ping/" file
Вышеприведенное безоговорочно установит значения SUT_INST_EXAMPLES
и SUT_INST_EXAMPLES
на значения $examples
и $ping
соответственно.
Вы можете просто переключиться с помощью:
sed -i -E '/^SUT_INST_(PING|EXAMPLES)=/{s/false/true/;t;s/true/false/;}' infile
Это изменит true
на false
или false
на true
в зависимости от текущего значения.