LINUX.ORG.RU

Редирект stdout в stdin

 


0

1

Можно ли сделать редирект stdout произвольного процесса в stdin терминала? Например, что-то вроде echo ls -la 0> и после этого должна выполниться команда ls -la

echo выводит «ls -la» в stdout и этот вывод должен отправиться в stdin текущего терминала. По сути, нужно тоже самое, что если бы я сам набрал «ls -la» Такое возможно?

Зачем???

Во-первых, просто стало интересно, и я найти ничего подходящего не могу.
Во-вторых, например, такой случай: копирую и запускаю какую-то команду, например:
>> inotifywait
получаю:
If 'inotifywait' is not a typo you can use command-not-found to lookup the package that contains it, like this: cnf inotifywait
выполняю:
>> cnf inotifywait
получаю:
Try installing with: (тут новая строка) sudo zypper install inotify-tools
и далее мне бы хотелось взять вот это
sudo zypper install inotify-tools
и просто перенаправить, будто бы я сам эту команду ввёл.


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

А в текущий bash процесс нельзя сделать? Чтобы оно в history сохранялось. Чтобы потом можно было стрелками выбрать предыдущую команду и изменить её/добавить параметры.

vvvv
() автор топика

в ~/.bashrc:

alias cnf="~/bin/cnf.sh"

Создаешь папку ~/bin, кладешь куда скрипт cnf.sh:

#!/bin/bash

OUT=`dnf $@ 2>&1`

echo "$OUT"
echo "$OUT" | grep "sudo zypper install" | sed 's/.*sudo zypper install \(.*\)"/\1/g' | xargs -L1 sudo zypper install

Протестил на центоси с dnf – все работает.

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

Можно заниматься извращением с отрыванием foreground group у текущего процесса и засовыванием туда вывода, но ты же сказал, что тебе для истории надо, поэтому можно проще:

cnf 2>&1 | tail -1 | tee -a ~/.bash_history | bash

Почитай что-нибудь полезное по теме. Тут же элементарные вещи.

Aceler ★★★★★
()