/etc/resolv.conf
часть конфигурации клиента DNS (который находится в его самой простой форме часть libc), который говорит это что серверы спросить при разрешении запроса DNS. Если можно жить без DNS, т.е. использовать IP-адреса для всего, которое включает жесткое кодирование они в /etc/hosts
, Вам не будет нужен он. После того как необходимо будет разрешить имя хоста с помощью DNS, Вы испытываете необходимость в нем.
Для установки соединения, Вы должны:
Похоже, что вы хотите смоделировать сеанс интерактивного терминала, в котором пользователь вводит команду, ожидает ответа (или, учитывая, что цель ed
, иногда ожидает ответа), затем вводит другую команду и т.д. Вы можете написать сценарий , ожидающий
, но может быть достаточно просто отправить строку одновременно на терминал и в целевой процесс, с краткой паузой между каждой строкой.
$ while IFS= read -r line
do
printf '%s\n' "$line" >/dev/tty
printf '%s\n' "$line"
sleep 0.5
done < helloworld | ed
a
hello
world
.
,n
1 hello
2 world
,s,o,O,g
,n
1 hellO
2 wOrld
Q
Чтобы лучше отличить ввод от вывода, можно добавить цвет или другую подсветку в строку echo «$ line» >/dev/tty
или, в данном случае, включить символ подсказки в ed
(команда P
), чтобы перед каждой командой ed
отображался символ *
.
Поместите имя параметра перед @
, как показано ниже:
--data-binary file@myfile.bin
Из
manpage :
-121--108698-name @ filename Это приведет к загрузке данных из данного файла (включая любые новые строки), URL-кодировать эти данные и передавать их в POST. Часть имени получает знак равенства, добавляемый, что приводит к name = urlencoded-file-content. Обратите внимание, что имя должно быть URL-адрес уже закодирован.
Ну, после монкейминга с ним, это то, что я бы использовал:
awk '{ print; system("sleep 0") }' edscript | tee /dev/tty | ed
или, без теэ
:
awk '{ print >"/dev/stderr"; print | "ed"; system("sleep 0") }' edscript
Если print > «/dev/stderr »
не работает в вашей системе, вы могли бы использовать print |« cat > & 2 »
.
С gnu sed
:
sed -u -n -e 'p;w /dev/stderr' -e 's|.*||e' edscript | ed
Другой способ, который также работает:
Используйте split
для разделения edscript на каждой строке:
split -l1 edscript
это приведет к образованию частей, таких как xaa
, xab
... xah
.
Для получения ожидаемого результата можно использовать следующие элементы:
for i in x*; do awk '{ print >"/dev/stderr"; print }' $i; done | ed
или
for i in x*; do sed -n -e 'p;w /dev/stderr' $i; done | ed
. Тогда вы rm x *
...
Звучит так, как будто вы хотите смоделировать интерактивный терминальный сеанс, в котором пользователь вводит команду, ждет ответа (или, учитывая, что целью является ed
, иногда ждет ответа), затем вводит другую команду и т. д. Можно написать скрипт expect
для этого, но этого может быть достаточно, чтобы просто послать строку одновременно и терминалу, и целевому процессу, с короткой паузой между каждой строкой.
$ while IFS= read -r line
do
printf '%s\n' "$line" >/dev/tty
printf '%s\n' "$line"
sleep 0.5
done < helloworld | ed
a
hello
world
.
,n
1 hello
2 world
,s,o,O,g
,n
1 hellO
2 wOrld
Q
Чтобы лучше отличить ввод от вывода, можно добавить цвет или другую подсветку в echo "$line" >/dev/tty
строке, или, в данном конкретном случае, включить символ подсказки в команде ed
(команда P
) так, чтобы перед каждой командой *
отображалась ed
.
Я сделал кое-что ... сложное. Недавно я изучал ex
/ ed
- я не очень хорошо разбираюсь в этом - и это дало возможность погрузиться немного глубже. Это сначала анализирует ed
скрипт и передает его ed
in-stream:
b='[:blank:]'
sed -e 'h;/\n/!i\' -e 0i -e 's/^\(.*[^\]\)*\(\\\\\)*\\$//;tn'"
/^\n*\([0-9;$,.$b]*[gGvV].*\\\\\n[$b]*\)*\([0-9,$.;${b}]*[aic][$b]*\)\
\(\n\(.*\)\n\.\)*\(\n.*\)*$/{ s//\4/;:n" -e 'G;//{N;D
};g;s//\1\2/;l;x;s//\4/;l;H;s/.*/./;a\' -e '.
};l;g;i\' -e .\\ -e 1,.p\\ -e u <ed_script | ed
Он менее сложен, чем раньше - и теперь практически все сложности заключаются в одном регулярном выражении. охватывает две строки. Это одно длинное регулярное выражение выполняет практически все тестирование всего скрипта.
Идея заключается в том, что, насколько я могу судить, вы можете перейти в режим вставки только с одним из a
ppend, i
nsert или c
команды изменения. режим вставки затем принимает весь ввод буквально до следующей встречающейся строки, состоящей только из .
точка. Любая другая продолженная команда, которая охватывает несколько строк - даже последовательность таких, где задействованы G
, g
, V
или v
- обязательно продолжается до следующей строки с обратной косой чертой \
в конце - хотя, как обычно, обратная косая черта \
в этом контексте экранируется сама собой.
Хотя это вполне возможно, я ошибаюсь, но я думаю , что это обрабатывает все случаи. Для каждой строки ввода, которая не соответствует [aic]
... .
dot series sed
вставляет серию команд, которые выглядят так:
0i
command-line$
.
1,.p
u
...инструктируя ed
i
nsert l
ook (как написано sed
) по его собственной команде, затем p
отредактировать его и, наконец, u
отменить всю операцию - что дает очень удобный результат выполнения редактирования, печати, реверсирования, и восстановление последнего адреса одним действием.
Для тех строк, которые совпадают с в последовательности либо завершающих обратных косых черт, либо [aic]
... .
серия немного сложнее. В этих случаях sed
рекурсивно втягивает их, пока не встретит конец серии, прежде чем выполнить l
ок. Я был осторожен, чтобы отделить [aic]
, .
, и фактический буквальный ввод в отдельные распечатки - каждый из этих типов получит свое собственное l
ook - так что буквальный ввод будет объединен как можно больше ( sed
прервет вывод l
ook на 80 символов по умолчанию) .
Думаю, проще просто показать вам. Вы заметите приглашение ?
ниже - это происходит из-за того, что команда g
, заданная до того, как это недопустимая команда, - не потому, что sed
искажает ввод (Надеюсь) .Вот результат модифицированной версии вашего примера набора данных:
g \\\n a$
hello\nworld\\\n\n 0a\n world\\\nworld\nworld$
.$
?
,n$
1 hello
2 world\
3
4 0a
5 world\
6 world
7 world
,s,o,O,g$
4$
0a
.,$n$
4 0a
5 wOrld\
6 wOrld
7 wOrld
,s,$,\\\n\\\n\\\\$
\
,n$
1 hellO
2
3 \
4 wOrld\
5
6 \
7
8
9 \
10 0a
11
12 \
13 wOrld\
14
15 \
16 wOrld
17
18 \
19 wOrld
20
21 \
Q$