У мене є такий файл 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чи подібне, інтерактивні частини не можуть бути написані в сценарії оболонки.