Запустите терминал от сочетания клавиш, выполните интерактивную команду и выход в Ubuntu 17.10

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

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

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

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

  1. Я могу связать сочетание клавиш в настройках к gnome-terminal: Это открывает терминал как ожидалось.
  2. Затем я ввожу в недавно открытом терминале свою команду gio open $(fzf): Если я выбираю файл PDF из fzf, это открывается, проявляют с выбранным файлом.
  3. Я могу ввести Ctrl+D для закрытия терминала. Выполнение этого не закрывается, проявляют. Это - намеченное поведение.

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

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

Что я попробовал.

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

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

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

2 ответа

То же самое беспокоило меня, поэтому я отвечу на этот старый вопрос. Я обнаружил, что xdg-open и gio open имеют проблемы с такого рода сценарием, и я также заметил, что у gnome-Terminal есть проблемы с ним. Например, xdg-open может открывать gedit для редактирования текстовых файлов, но не показывать для просмотра PDF-файлов. Поэтому я использую следующий скрипт с xterm -e. Обратите внимание, что при этом файлы nohup.out останутся в вашем домашнем каталоге, вы можете перенаправить стандартный вывод, если это вас беспокоит.

#!/bin/bash

file="$(fzf)"

[ - n "$file" ] || exit 1

end="${file##*.}"

case $end in
  pdf | djvu | ps )
    exec nohup evince "$file"
    ;;
  * )
    exec nohup xdg-open "$file"
    ;;
esac

0
ответ дан 2 November 2019 в 01:08

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

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

Здесь детализирован ответ, как выполнить отдельные процессы.

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

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

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

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

0
ответ дан 2 November 2019 в 01:08

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

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