LINUX.ORG.RU

вставить текст в командрую строку из выхлопа программы

 


2

1

Привет.

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


Ответ на: комментарий от legolegs

Нет, это не то.

Попробую театрально-консольную наскальную живопись.

$ echo "uname -a; blahblah" | somemagic
# выхлопа нету, а результат парадет в input line
$ uname -a; blahblah
ijk ()

баше выполнить программу, и, скажем, пайпом вылить выхлоп в строку ввода (без выполнения)

Тогда я не понимаю задачи.

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

Что не понятно? Выполнить что-либо, а его stdout перенаправить в readline buffer интерактивного баша, посмотреть, подправить и нажать ЕНТЕР для выполнения

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

А если в выхлопе не одна, а несколько строк?

robus ★★★★ ()

Пока единственный бредовый вариант это:

в ~/.bashrc добавить

export HISTCONTROL=ignoreboth
shopt -s histappend
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

# перед echo пробел, чтобы историю не засоряло (если надо не засорять)
 echo 'ls -lrt *.txt' | sed 's/txt/tex/' >> ~/.bash_history

<жмем стрелку вверх>
# и получаем в input buffer'e 
ls -lrt *.tex
futurama ★★★ ()
Ответ на: комментарий от futurama

Божественно, спасибо за очеловечивание просьбы.

За способ что чуть ниже - как-то не оно.

Но зато я совсем забыл что баш это о readline, и взгуглил с другой стороны. В итоге получил упоминание магического хака вокруг некого 0x5412.

Вот пример с ним.

function inject() {
  perl -e 'ioctl(STDIN, 0x5412, $_) for split "", join " ", @ARGV' "$@"
}

$ inject uname -a
uname -a$ uname -a

Пока оно еще подсыпает дубль в stdout, но зато выполняет основную хотелку. Буду смотреть дальше.

ijk ()
echo "After running date: `date`"

Это то, что тебе надо? Выхлоп date подставляется как строка ввода для echo.

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

Выполнить что-либо, а его stdout перенаправить в readline buffer интерактивного баша, посмотреть, подправить и нажать ЕНТЕР для выполнения

Ну, это-то дело совсем нехитрое:

readline-collect-output ()
{
    read -r -d '' READLINE_LINE < <($READLINE_LINE)
    READLINE_POINT=${#READLINE_LINE} # курсор в конец строки
}

bind -m emacs -x '"\C-j" : "readline-collect-output"'

Мне, однако, кажется, что это не очень удачный подход — предсказать, сколько строк будет в выводе не очень просто, а количество знаков, что можно ввести в командную строку, бесконечным быть не должно. Да и редактировать простыню в Ридлайне откровенно неудобно — это все-таки редактор одной строки.

Я бы подумал в сторону смены эмулятора терминала на что-нибудь менее тупое.

Вот как в том же term.el можно переключиться в построчный режим (C-c C-j), любым удобным способом вернуться на любую строчку выше — будь она вводом или выводом, на месте ее изменить и нажать на ввод — она уйдет на выполнение.

Если же привязанность к вашему эмулятору терминала сильна, то стоит хотя бы подумать о том, чтобы направлять вывод не непосредственно в строку ввода, а сперва в ваш любимый текстовый редактор — тут тоже ничего хитрого нет, используем временный файл.

Zmicier ★★★★★ ()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от ijk

Выглядит как-то так.

Перейдя по ссылке ничего не вижу.

Zmicier ★★★★★ ()

Если в иксовом эмуляторе терминала, то

xvkbd -xsendevent  -text "`команда`"
te111011010 ()
Ответ на: комментарий от Zmicier

Спасибо за простыню, но мне это малоинтересно. Пиши ТС'у.

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

Пожалуйста. Лично? Зачем? Я пишу это на веб-форуме.

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

Отвечай тому кто спрашивает, а не первому попавшемуся.

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

???

Сударь, вы кажется не проснулись.

Мы на веб-форуме — тут пишут не друг другу лично, а так, что каждый может прочесть. Я полагаю, что ОП, если ему интересно решение, подписан на эту ветку, и особо его уведомлять не стоит.

Zmicier ★★★★★ ()
Ответ на: ??? от Zmicier

Re: ???

Понятно: bydlo vulgaris

futurama ★★★ ()
cmd >f
nano f
sh f
anonymous ()

А какая задача стоит?
Я даже не буду как обычно говорить что «это не описание задачи, а описание твоих фантазий на тему её решения», потому что тут явно есть какая-то эпичная предыстория

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

Вангую просто юзабилити типо буфера обмена в иксах.

anonymous ()

пора ужО держателям лора скомпаундить твой и подобные вопросы о «глубоком» использование шеля,линукса/фря,etc вместе с наилучшими(80%) решениями и издаться аля Хакири но не Флёнов.

ибо этот вопрос явно ужо на форуме тут был задаваем.

зы. а нет ли у баша открытого пайпа срание в который будет срание в его stdin вместе с эхом на stdout

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