Форум русскоязычного сообщества Ubuntu


Автор Тема: Вызов редактора из bash-скрипта  (Прочитано 1699 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Saha

  • Автор темы
  • Активист
  • *
  • Сообщений: 517
    • Просмотр профиля
Вызов редактора из bash-скрипта
« : 27 Апрель 2009, 17:22:08 »
Пытаюсь написать скрипт, который бы вызывал редактор (vim, например) для каждого файла из списка по очереди. То есть, открыл на редактирование один файл, я его меняю, закрываю - он открывает по списку следующий и так далее.
Пишу так
#!/bin/bash

FILE=dirs
COUNT=0

exec 0<$FILE

while read line
do
  echo "Line $COUNT is " $line
  COUNT=$((COUNT+1))

  vim dp/$line/file
done

Выполняю, а он мне в ответ
Vim: Предупреждение: Ввод происходит не с терминала
Vim: Ошибка чтения ввода, выход...

Vim: Готово.

Как побороть?  :)

Оффлайн ehpc

  • Новичок
  • *
  • Сообщений: 7
    • Просмотр профиля
    • ehpc.ru
Re: Вызов редактора из bash-скрипта
« Ответ #1 : 27 Апрель 2009, 17:59:27 »
Когда вы запускаете скрипт, создается новый шелл, но новый терминал для вывода ему не присваивается. Поэтому текстовый редатор, в данном случае vim, жалуется, что ему не с чем работать.
Есть два пути обойти это:
1. Запускать новый терминал, задав ему на выполнение запуск редактора:
terminator -x vim dp/$line/fileгде terminator - один из доступных терминалов, для других читайте man;
2. Перенаправить ввод вызванного редактора на текущий терминал, воспользовавшись устройством /dev/tty, которое как раз представляет текущий терминал, из которого запускается скрипт:
vim dp/$line/file < /dev/ttyВторой вариант думаю более удобен для вашей задачи.

Оффлайн Saha

  • Автор темы
  • Активист
  • *
  • Сообщений: 517
    • Просмотр профиля
Re: Вызов редактора из bash-скрипта
« Ответ #2 : 27 Апрель 2009, 17:59:35 »
Вроде, до меня дошло, в чем проблема =)
Собака зарыта в перенаправлении ввода exec 0<$FILE
Поэтому теперь вопрос - как организовать считывание из файла построчно =)
(Данный пример взял с какого-то гугла, когда искал по этой проблеме)

Пользователь решил продолжить мысль 27 Апрель 2009, 18:01:11:
2. Перенаправить ввод вызванного редактора на текущий терминал, воспользовавшись устройством /dev/tty, которое как раз представляет текущий терминал, из которого запускается скрипт:
vim dp/$line/file < /dev/ttyВторой вариант думаю более удобен для вашей задачи.

Спасибо, работает  :)
« Последнее редактирование: 27 Апрель 2009, 18:01:11 от Saha »

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Вызов редактора из bash-скрипта
« Ответ #3 : 27 Апрель 2009, 18:01:26 »
for i in `cat $FILE`
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн Saha

  • Автор темы
  • Активист
  • *
  • Сообщений: 517
    • Просмотр профиля
Re: Вызов редактора из bash-скрипта
« Ответ #4 : 27 Апрель 2009, 18:05:48 »
for i in `cat $FILE`
Спасибо, будем знать  :)

 

Страница сгенерирована за 0.094 секунд. Запросов: 24.