Запустите терминал с клавиатуры, запустите интерактивную команду и выйдите в Ubuntu 17.10

Я пытаюсь выполнить следующее:

открыть gnome-терминал из сочетания клавиш, скажем Ctrl + Shift + E. Запустите команду в терминале. Для concrenetess команда gio open $(fzf). Команда интерактивна и запускает внешнюю программу (например, evince). После запуска внешней программы закройте терминал, не закрывая внешнюю программу.

Команда, которую меня интересует для шага 2 выше, это gio open $(fzf): я выбираю файл с помощью нечеткого finder fzf, а затем команда gio open открывает этот файл с помощью программы по умолчанию gnome .

Я могу сделать три шага выше по одному:

открыть гном-терминал из сочетания клавиш, скажем Ctrl + Shift + E. Тогда Я набираю новый терминал opend для своей команды gio open $(fzf): если я выберу PDF-файл из fzf, он откроется evince с выбранным файлом. Запустите команду в терминале. Для concrenetess команда gio open $(fzf). Команда является интерактивной и запускает внешнюю программу (например, evince).

и выполнение этих трех шагов вручную работает.

Моя цель - автоматизировать вышеизложенное. Он должен работать следующим образом. Когда я набираю сочетание клавиш Ctrl + Shit + E (или любой другой), должен открываться gnome-терминал, и должна выполняться команда gio open $(fzf). Как только выполняется интерактивная команда (которая открывает внешнюю программу, такую ​​как evince), терминал должен закрываться автоматически, не закрывая evince.

Моя цель - автоматизировать выше. .

Добавление сочетания клавиш с помощью команды gnome-terminal -- bash -c "gio open $(fzf)" не работает. Нажатие комбинации клавиш ничего не делает. Если я добавлю команду gio open $(fzf)$ в конец моего .bashrc, комбинация клавиш с командой gnome-terminal открывает терминал и команда запускается. Как только я выберу файл pdf, evince откроется с выбранным файлом (да !!!). Но тогда, если я нажму Ctrl + D, терминал закроется и, следовательно, появится (возможно, потому что evince - это подпроцесс?). Если я добавлю команду gio open $(fzf)$ && exit в конец моего .bashrc, комбинация клавиш с командой gnome-terminal откроет терминал, и команда будет запущена, но как только я выберу файл, терминал закроется без открытия evince ( evince, возможно, началось и сразу же закрылось, я не могу сказать).

Обратите внимание, что игра с .bashrc была в основном для целей тестирования, я бы хотел избежать загрязнения моего .bashrc.

0
задан 26 October 2017 в 20:57

2 ответа

Но тогда, если я нажму Ctrl + D, терминал закроется и, следовательно, появится (возможно, потому что evince является подпроцессом?)

Да, конечно, это подпроцесс, и вы должны запустить этот процесс как " отдельностоящий». После этого вы можете завершить основной процесс (в вашем случае - терминал).

Вот подробный ответ о том, как запускать отдельные процессы.

https://superuser.com/questions/178587 / how-do-i-detach-a-process-from-terminal-whole

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

bash -c "some_command" > /dev/null &2>&1

В этом случае окно терминала не будет повышаться вообще, и вам не нужно ничего добавлять в ваш .bashrc-файл.

0
ответ дан 18 July 2018 в 04:29
Но тогда, если я нажму Ctrl + D, терминал закроется и, следовательно, появится (возможно, потому что evince является подпроцессом?)

Да, конечно, это подпроцесс, и вы должны запустить этот процесс как " отдельностоящий». После этого вы можете завершить основной процесс (в вашем случае - терминал).

Вот подробный ответ о том, как запускать отдельные процессы.

https://superuser.com/questions/178587 / how-do-i-detach-a-process-from-terminal-whole

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

bash -c "some_command" > /dev/null &2>&1

В этом случае окно терминала не будет повышаться вообще, и вам не нужно ничего добавлять в ваш .bashrc-файл.

0
ответ дан 24 July 2018 в 18:05
  • 1
    Привет и спасибо за вашу помощь. Фактически, когда я нахожусь в уже открытом терминале, команда gio open $(fzf) открывает внешнюю программу (например, evince), и если позже я закрою терминал с помощью Ctrl + D, внешняя программа НЕ будет закрыта. Внешняя программа закрывается только в ситуации, когда команда запускается из .bashrc. – jlewk 27 October 2017 в 23:40

Другие вопросы по тегам:

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