У мене є такий файл bash під назвою "файл" (справжній робить щось корисне):
ed db/seeds.rb <<EOF
1,$-1d
a
123
456
.
w
q
EOF
Коли я запускаю "bash file", він не видаляє жодних рядків. Якщо я використовую 1d
замість 1,$-1d
нього, видаляємо перший рядок.
Чому це не працює? Я легко міг би вирішити, але мені цікаво, чому це не працює.
Якщо у вас частина сценарію виглядає так:
—
Фред Фінкл
ed file <<EOF
Сценарій виконує команду (у цьому випадку "ed") таким чином, що команда вважає, що наступні рядки вводяться інтерактивно. Це триває до тих пір, поки не зустрінеться рядок, що містить лише текст, що слідує за <<
(EOF у цьому випадку). Я постійно користуюся цією функцією.
tail
є спеціальним інструментом для виконання цього завдання.
Знову ж таки, це просто простий приклад того, що я роблю в реальному застосуванні. Хвіст спрацював би, але це не моє питання. Йдеться про ред.
—
Фред Фінкл
До речі, @ernie,
—
G-Man
diff -e
виробляє ed
скрипт для перетворення file1 в file2 . ed
підтримує неінтерактивне використання з 1-го дня, у 1970-х.
expect
чи подібне, інтерактивні частини не можуть бути написані в сценарії оболонки.