генерировать новое окно (любое) из сценария

Я хотел бы запустить скрипт, который обнаруживает текущий терминал и генерирует новое окно терминала в фоновом режиме с помощью команды оболочки (например, htop )

Я получаю желаемый результат в командной строке:

 cterminal="$(ps -p $(ps -p $$ -o ppid=) o args=)" $(echo $cterminal -e "htop")& 

и работает на всех терминалах. Но не из сценария:

 #!/bin/bash cterminal="$(ps -p $(ps -p $$ -o ppid=) o args=)" echo $cterminal "$cterminal" -e "htop" & 

текущий выход скрипта:

 $ bash script.sh /bin/bash $ /usr/bin/htop: /usr/bin/htop: cannot execute binary file 

Любые намеки?

One Solution collect form web for “генерировать новое окно (любое) из сценария”

Ваша команда ps печатает PID родительского процесса (PPID). Когда вы используете эмулятор терминала, $$ (текущий идентификатор процесса) будет указывать на ваш сеанс оболочки, а его PPID будет эмулятором терминала, который запустил его.

Скрипты запускаются в их собственных подоболочках . Это означает, что родительский процесс скрипта – это оболочка, которая запустила его. Итак, когда вы запускаете свою команду, вы не выполняете xterm -e htop но bash xterm -e htop . Проиллюстрировать:

 $ bash top /sbin/top: /sbin/top: cannot execute binary file 

Вы можете проверить это, выполнив echo $(echo $cterminal -e "htop") из сценария и из командной строки.

Чтобы запустить сценарий из эмулятора терминала GUI, вместо этого вы можете использовать PPID PPID:

 cterminal="$(ps -p $(ps -p $PPID -o ppid=) o args=)" 

Наконец, не используйте $(echo ...) для запуска вашей команды, просто запустите ее:

 #!/usr/bin/env bash $(ps -p $(ps -p $PPID -o ppid=) o args=) -e top 
  • Могу ли я повторно войти в отключенную сессию?
  • Получение конкретной линии с вывода терминала
  • stout не может присоединяться к большим файлам
  • Откройте терминал с приглашением для входа
  • Сохранение окон терминала в мяте
  • Linux Mint XFCE, команда запуска меню
  • Чтение пароля с клавиатуры вместо stdin
  • Завершить ввод текста в GPG
  • Есть ли способ получить контроль над терминалом с помощью ssh без экрана (дубликат)
  • Содержимое буфера Vi остается на экране после использования экранных команд
  • bash - почему \ x0d \ x20 стирает строку
  • Linux и Unix - лучшая ОС в мире.