В скрипте, как получить pid оболочки порожденного терминала для выполнения команд в нем, используя ttyecho? - PullRequest
0 голосов
/ 16 марта 2020

Я использую ttyecho (можно установить с помощью yay -S ttyecho-git) для выполнения команды в отдельном терминале, например так:

urxvt &
sudo ttyecho -n /proc/<pid-of-new-urxvt>/fd/0 <command>

Это не работает, потому что / proc / pid-of-new -urxvt / fd / 0 - символическая ссылка, указывающая на / dev / pts / x родительского терминала. В порожденном urxvt я запускаю zsh. Поэтому, если я использую pid этого zsh процесса, он работает:

sudo ttyecho -n /proc/<pid-of-new-zsh-within-new-urxvt>/fd/0 <command>

Как я могу получить pid нового zsh процесса, порожденного в новом процессе urxvt при запуске urxvt &? Или есть другое решение для достижения того же результата?

1 Ответ

1 голос
/ 18 марта 2020

pgrep -P <pid-of-new-urxvt> дает pid ребенка zsh процесса. Спасибо @ user1934428 для мозгового штурма

Вот результирующий скрипт bash:

urxvt &
term_pid=$!

# sleep here makes us wait until the child shell in the terminal is started
sleep 0.1

# we retrieve the pid of the shell launched in the new terminal
shell_pid=$(pgrep -P $term_pid)

# ttyecho executes the command in the shell of the new terminal and gives back control of the terminal so you can run further commands manually
sudo ttyecho -n /proc/${shell_pid}/fd/0 "$@"

Так что, когда я запускаю «скрипт ls», он открывает новый терминал, запускает ls и дает верните подсказку с открытым терминалом. Мне просто нужно было добавить ttyecho в файл sudoers.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...