Я начинаю экспериментировать с Crunchbang (который основан на Debian и использует терминатор ) в качестве среды веб-разработки, и одной из вещей, с которыми я борюсь, является поведение xdg-open
. Я пришел из OSX, так что извините, если этот вопрос окажется слишком плотным.
Я хотел бы иметь возможность открыть URL-адрес, xdg-open http://www.google.com
а затем продолжать использовать то же окно терминала для работы (это как open
функции в OSX). Прямо сейчас, использование xdg-open
занимает текущую вкладку / сессию, пока я не закрою окно браузера или не завершу вручную ctrl + c
. Я бы предпочел, чтобы он запускал новый процесс, чтобы я мог открыть URL-адрес, обратиться к данным на странице и использовать его в той же вкладке / окне без необходимости открывать дополнительный.
источник
Ответы:
Странно, это работает так из коробки на моем Debian. Попробуйте запустить его в фоновом режиме:
Вы можете превратить это в функцию, добавив следующие строки в ваш
~/.bashrc
файл:Затем вы можете просто запустить,
open http://www.google.com
и он будет работать в фоновом режиме.источник
open
(то есть open = 'xdg-open'), есть ли способ получить функциональностьxdg-open <url> &
без использования функции оболочки?Если вы хотите отсоединить процесс от текущей оболочки, а не запускать его как фоновое задание
xdg-open http://www.google.com &
, мне нравитсяdetach
утилита:Можно создать псевдоним для этого. Мне нравится
detach
более, такnohup
как по умолчанию закрывает stdin stdout и stderr, поэтому его вызов будет чище.источник
detach
похоже, не существует в моем дистрибутиве.nohup
запускает процесс, но все еще занимает окно терминала.detach
тоже не в моем дистрибутиве; но питон может обрабатывать открытие URL - адресов и отсоединение:python -m webbrowser -t "http://example.com"
. Это должно работать «из коробки» почти на всех сравнительно недавних дистрибутивах Linux.detach
его нет даже в AUR, его оказалось легко установить из исходного кода, и, кроме того, это была единственная программа, которая достигла того, чего я хотел. (альтернативы, перечисленные здесь и наdetach
веб-сайте, не позволяют закрывать оболочку, покаxdg-open
она работает, или, по крайней мереdetach
, не заставили мою оболочку жаловаться ни наxdg-open
ждет завершения программы Это по замыслу. Если программа является программой текстового режима, она должна оставаться на переднем плане в терминале. Даже если программа с графическим интерфейсом, это поведение полезно в том случае, еслиxdg-open
используется из сценария, и сценарий хочет выполнить что-то после того, как файл был отредактирован (например, отправить новую версию куда-нибудь или иным образом сделать что-то с новой версией).Если вы не хотите ждать, бегите
xdg-open
в фоновом режиме. Вы можете запустить любую команду оболочки в фоновом режиме, поставив в конце амперсанд.С некоторыми программами
xdg-open
возвращается сразу. На самом деле происходит то, чтоxdg-open
вызывающая программа немедленно возвращается. Обычно это происходит с программами с графическим интерфейсом, которые открывают все файлы в одном экземпляре: когда вы запускаете их второй раз, они посылают сообщение запущенному экземпляру, чтобы сообщить ему об открытии файла, и немедленно завершают работу.источник
xdg-open
немедленно возвращается (я могу подтвердить это в Ubuntu 16.04), но вызываемая программа может перейти в фоновый режим. Например, в моей системеxdg-open
вызывается Evince для файлов PDF;evince foo.pdf
блокирует, пока вы не закроете файл PDF, если PDF уже не открыт, и в этом случае второйevince
процесс, запущенный путем,xdg-open
фокусируется на существующий экземпляр и завершает работу.xdg-open
не имеет никакого контроля над этим, если нет способа заставить программу поддерживать работающий процесс.Объединив ответ Тердона и обсуждение Дэном Д.,
nohup
я создал функцию, которая делает именно то, что я хочу:Я добавил это в мой
.bashrc/.zshrc
файл:Для объяснения
/dev/null 2>&1
см. Это обсуждение о сокрытииstdout
иstderr
.источник
Попробуй это:
Я использую эту технику для постановки в очередь magnet: // URL-адресов в моем клиенте Bit Torrent Vuze.
Одинарные кавычки помогают защитить содержимое URL-адресов, чтобы оболочка не пыталась их интерпретировать.
источник
xdg-open
? Похоже, что некоторые из ответивших здесь указали, что нормальным поведением является то, что управление возвращается терминалу через некоторое время.Если вам нужно открыть веб-страницы из командной строки (цикл), вы можете просто открыть браузер перед запуском скрипта.
В этом случае он не ожидает закрытия браузера после первой ссылки, а открывает их все в новых вкладках.
источник
Как и сегодня, ни один из этих вариантов не работал для меня. Я полностью осознаю, что ОП сказал "используй xdg-open", извини заранее.
Я закончил тем, что делал по-простому
chrome https://google.es --new-window || chromium https://google.es --new-window || firefox https://google.es
.Если у вас нет ни одного из этих 3-х браузеров, просто не стесняйтесь использовать правильные с вашим предпочтением порядка.
Примечание. Firefox открыл новое окно, ничего не добавляя. Дело не работает для вас, используйте
firefox https://google.es -new-instance -new-window
. Обратите внимание, что это только один-
для флагов Firefox.источник
disown - правильная команда для этого.
Для этого я использую 2 функции, чтобы сделать его более читабельным.
источник
disown
не предотвращает отправку ошибок в терминал.