Я пытаюсь выполнить следующее:
gio open $(fzf)
. Команда является интерактивной и запускает внешнюю программу (те, которые проявляют).Команда, которой я интересуюсь для шага 2 выше, gio open $(fzf)
: Я выбираю файл с помощью нечеткого средства поиска fzf
, и затем команда gio open
открывает тот файл с программой по умолчанию гнома.
Я могу сделать три шага выше один за другим:
gnome-terminal
: Это открывает терминал как ожидалось.gio open $(fzf)
: Если я выбираю файл PDF из fzf
, это открывается, проявляют с выбранным файлом.и выполнение этих трех шагов вручную работает.
Моя цель состоит в том, чтобы автоматизировать вышеупомянутое. Это должно работать следующим образом. Поскольку я ввожу сочетание клавиш 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.
То же самое беспокоило меня, поэтому я отвечу на этот старый вопрос. Я обнаружил, что 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
Но затем, если я поразил 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 файлу.