В ed (строковый редактор), как создать новый файл для редактирования?

Установка переменной типа VAR='asdf' оставляет среду неизменной, а это означает, что программы, которые вы запускаете в том же сеансе, ничего не знают о VAR и не сможет получить к нему доступ. Вам нужно такое поведение при написании сценариев оболочки.

export, с другой стороны, является встроенной функцией bash, которая изменяет среду, делая экспортируемую переменную видимой для дочерних процессов, порожденных в текущем сеансе. Вы можете добиться того же, запустив VAR='asdf' %program_name%.

env — это не встроенная функция, а отдельная программа. На первый взгляд это работает точно так же, как когда вы VAR='asdf' %program_name%, но на более низком уровне все становится немного сложнее. Сначала запускается env. Он изменяет среду, затем выполняет команду с заданными аргументами. Такого же поведения вы можете добиться в своем собственном коде, используя системный вызов exec(3).

setenv — это просто экспорт в оболочках семейства csh, как указано в вашем ответе.

0
03.04.2017, 10:18
2 ответа

Просто write it. ed создаст файл для записи:

$ ed fred
fred: No such file or directory
w
0

?
q
$ ls fred
fred
4
28.01.2020, 02:19

Текст, который вы читаете, вероятно, написан для какой-то другой реализации ed. Диагностический вывод не полностью согласован во всех реализациях редактора. Редактор, который вы используете, ведет себя так, как можно было бы ожидать от текущей реализации, то есть он выводит короткое диагностическое сообщение о том, что barneyне найден, и помещает вас в «командный режим». Помимо подробностей о том, что на самом деле говорит диагностическое сообщение , это то же самое, что и в вашем тексте.


Редактор edимеет понятие "имя файла по умолчанию". Когда вы запускаете редактор с помощью ed barney, имя файла по умолчанию — barney. Когда вы записываете буфер в файл с помощью w, файл с именем файла по умолчанию перезаписывается буфером. Если файл не существует,он будет создан.

Вы устанавливаете имя файла по умолчанию из командной строки, как показано выше и в своем вопросе, но вы также можете установить его с помощью команды f. Без аргумента команда fвыводит имя файла по умолчанию на терминал :

.
$ ed -p '*' myfile
myfile: No such file or directory
*f
myfile
*f my-other-file
my-other-file
*w
0
*q
$ ls -l my-other-file
-rw-r--r--  1 myself  myself  0 Nov 17 11:41 my-other-file

Если нет имени файла по умолчанию (вы запустили редактор без имени файла ), вам нужно либо установить имя файла по умолчанию с помощью f somenameперед записью файла с помощью w, либо вы можете указать имя файла в wв качестве аргумента. Использование wс аргументом имени файла устанавливает имя файла по умолчанию как это имя, если не задано имя файла по умолчанию.

w myfileизменяет здесь имя файла по умолчанию:

$ ed -p '*'
*w
?
*w myfile
0
*f
myfile
*q

w bar-fileне изменяет ли здесь имя файла по умолчанию (, так как оно уже задано в командной строке):

% ed -p '*' foo-file
foo-file: No such file or directory
*w bar-file
0
*f
foo-file
*q
0
17.11.2021, 09:47

Теги

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