LINUX.ORG.RU

Запись в anonymous pipe - перенаправление stdin программы, запущенной в другой сессии

 , , ,


0

1

Всем привет. Есть следующая ситуация: mercurial при коммите требует ввода текстового сообщения. TortoiseHG в некоторых случаях для этих целей открывает в редакторе (sensible-editor) временный текстовый файл, который после закрытия пользователем используется в качестве источника сообщения. Все было бы, вероятно, хорошо, если бы этим редактором не оказался vim. Он открылся в каком-то своем shell, доступа к которому из графической среды, естественно, нет. А коммит блокируется, пока не закрыт vim.

Хотел сделать echo ':wq' > /proc/PID/fd/0, но говорят permission denied, даже из-под рута. ls -l говорит, что 0 -> pipe[60898].

Собственно, вопрос: куда писать :q!, чтобы выйти из vim? Спортлото не предлагать.

P. S. вим просто прибил в итоге, так было быстрее и проще, но thg прибилось вместе с ним.

★★★

Ответ на: оффтопиком, но от Stil

Уж слишком оффтопиком. Сообщение можно и в TortoiseHG ввести, не в этом вопрос, ну вот прям совсем не в этом.

Kiborg ★★★
() автор топика

TortoiseHG в некоторых случаях для этих целей открывает в редакторе (sensible-editor) временный текстовый файл

да не должен вообще-то — https://bitbucket.org/tortoisehg/thg/src/d9b6c5b52be6156199708bc8fb84f60c689f...

1. покажите ~/.hgrc и $EDITOR 2. версии thg и hg

выглядит как будто hg где-то падает в отладчик, который и ждёт пользовательского ввода

littlechris ★★★
()

Собственно, вопрос: куда писать :q!, чтобы выйти из vim?

Никуда. vim наверняка открылся в каком-нибудь псевдотерминале.

tailgunner ★★★★★
()
Ответ на: комментарий от littlechris

Ну я в исходники смотреть не стал, у меня эта ситуация возникла, когда я попробовал ради эксперимента в качестве текста сообщения задать строку из одного пробела в thg. Видимо thg проверяет только на пустоту, а hg еще и на «строка состоит только из пробелов и табуляций». Версии точно не скажу, по-моему 2.6 hg и 2.13 thg, редактор по умолчанию pluma.

Но интересно все-таки немного другое, а именно: когда vim (или любая другая программа) запущен в sub-shell, или каким-то еще образом так, что прямого ввода с клавиатуры в него нет, как можно ему на stdin подать какие-либо данные?

Kiborg ★★★
() автор топика
Ответ на: комментарий от tailgunner

Честно говоря, не сильно знаком с псевдотерминалами. Значит ли это, что в stdin такого процесса записать ничего нельзя?

Kiborg ★★★
() автор топика
Ответ на: комментарий от Kiborg

Это значит, что stdin такого процесса - псевдотерминал, у которого свой протокол поверх байтового потока. Писать в такой stdin просто символы бессмысленно (или даже тупо невозможно - не помню деталей).

tailgunner ★★★★★
()

Попробуйте reptyr, neercs, retty.

ValdikSS ★★★★★
()
Ответ на: комментарий от tailgunner

Понял, а есть какой-то вариант работать с этим tty, ну чтобы я мог хотя бы как-то закрыть vim, не прибегая к kill? ValdikSS, reptyr, neercs, retty не для этого предназначены, случаем?

В любом случае, спасибо - теперь хоть понятно какие маны читать :)

Kiborg ★★★
() автор топика
Ответ на: комментарий от Kiborg

Если не ты его открыл (через pyexpect, например) - вряд ли.

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.