Можно ли отправить данные в оболочку другого псевдотерминала?

Есть отличная утилита Boot-Repair на основе графического интерфейса. Попробуйте.

1.Загрузитесь с Ubuntu Live USB / DVD

2. Установите средство восстановления загрузки, используя:

sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install -y boot-repair && boot-repair

Для получения дополнительной информации https://help.ubuntu.com/community/Boot-Repair

9
16.05.2017, 00:09
3 ответа

Каждый процесс имеет 3 "файловых дескриптора" по умолчанию

0 is stdin  (standart input)
1 is stdout (standart output)
2 is stderr (standart error output)

Вам нужно найти PID процесса оболочки, а затем вы можете сделать следующее:

echo "test" > /proc/{your_shell_pid}/fd/1

Это приведет к печати теста в стандартном выводе процесса оболочки

-1
27.01.2020, 20:08

TIOCSTI работает, как сказано в комментарии thrig выше:https://stackoverflow.com/a/29615101/2995591

0
31.07.2020, 20:52

Возможно, это не совсем то, что вы ищете, но подобные проблемы я обычно решаю, запуская экранные сеансы в своих терминалах.

Я делаю так:

  • В терминале 1 я запускаю новый экранный сеанс с именем term1 сscreen -S term1
    Часто, когда мне нужна эта функциональность, терминал 1 еще не существует. В этом случае я создаю сеанс в новом терминале с помощью xterm -e screen -S term1 & ; disown
    . Возможно, вам интересно узнать о & ; disown. Это потому, что я хочу вернуть оболочку после запуска xterm, и я не хочу xtermумереть, если оболочка, в которой я ее запустил, умрет
  • Я делаю что-то подобное во втором терминале:screen -S term2(или создаю новый терминал, запустивxterm -e screen -S term2 & ; disown)
  • Связь теперь работает следующим образом :
    • Вы можете отправить текст на 1-й терминал отовсюду (, включая терминал 2 ), с помощью команды вида:
      screen -S term1 -X stuff 'echo "foo"\n'
      Результат будет таким же, как при вводе echo "foo"на 1-м терминале и нажатии Enter
    • .
    • Более простой пример :для отправки ввода some words, но , а не , после которого следует Введите на клемму 2, которую вы можете использоватьscreen -S term2 -X stuff 'some words'

Примечания:

  • Если у вас уже были сеансы экрана с именами term1и/или term2, используйте другие имена
  • Если вы запустили screen -S somenameв уже существующем терминале, обратите внимание, что после запуска exitзавершается только сеанс экрана.
    Если вы хотите остановить весь терминал, используйте вместо этого screen -S somename ; exit.
    В этом нет необходимости для вновь созданных терминалов.
0
21.04.2021, 06:15

Теги

Похожие вопросы