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

Я хотел бы запустить скрипт, который обнаруживает текущий терминал и генерирует новое окно терминала в фоновом режиме с помощью команды оболочки (например, 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 
  • Zsh: автоматическое изменение выполняемой команды
  • Поддерживает ли ANSI ссылки по тексту?
  • Отсутствие цвета в терминале KDE
  • Есть ли (легкая) замена для `rxvt-unicode`?
  • vim внутри экрана: отступы отображаются неправильно
  • Запретить приложение изменять настройки терминала?
  • Открыть файл, найденный с помощью команды «Найти»
  • Добавить статический текстовый слой / бар в терминале
  • Как автоматически изменить фон терминала на основе имени ssh?
  • Какой протокол / стандарт используется терминалами?
  • stout не может присоединяться к большим файлам
  • Interesting Posts

    Убейте невосприимчивый процесс по имени, но сохраните реагирующие процессы

    Debian, Apache, mod_userdir, suexec, php-cgi

    Как обеспечивается атомарность yum?

    Как использовать эти разделы для установки fedora 20

    как получить идентификатор устройства для определенного сетевого интерфейса?

    Как изменить IP-адрес моего компьютера?

    Автоматически устанавливать атрибут append для вновь созданных файлов / папок?

    Моя машина не имеет имени хоста. «Не удалось запустить hostname.service: Unit hostname.service замаскирован».

    Небольшие обновления и номера версий на CentOS

    Как вывести количество всех файлов с «tty» в имени файла в каталоге Linux, где хранятся файлы на системных устройствах

    Внешняя фрагментация во FreeBSD из-за неизменяемых страниц ядра

    Почему я могу ping google.com, но не www.google.com

    Как я могу оперировать \ 1 в sed (или $ 1 в awk)?

    Как установить CentOS 7 поверх Debian jessie удаленно?

    Как скопировать все файлы, которые были созданы или изменены за последние 12 месяцев?

    Linux и Unix - лучшая ОС в мире.