Изменение поведения xdg-open
Я довольно часто использую команду xdg-open в своем терминале Ubuntu Linux. Однако меня раздражают две вещи:
Можно ли подавить сообщения об ошибках?
Можно ли заставить команду всегда завершать? (То есть не продолжать работу, так что у меня есть еще одна "новая линия" в моем терминале).
Я понимаю, что 2 может быть невозможным из-за способа работы программы, но я думаю, что 1 есть.
3 ответа
Первый легко. Просто
alias xdg-open="xdg-open 2>/dev/null"
Если вы хотите это навсегда, просто добавьте эту строку в файл ~/.bashrc.
Я рекомендую вам подумать дважды, если вы хотите стать слепым к ошибкам.
Второй довольно смущает меня. xdg-open не должен быть интерактивным. На моем компьютере (Debian sid) xdg-open исполняет команду и завершает работу, даже если сама команда не завершилась (т.е. вы не закрыли приложение, открытое для URL-адреса). Я думаю, что это должно быть поведение xdg-open на любой платформе (он должен работать точно так же, как и в любой системе XDG, это и есть его цель).
В любом случае, для любой команды, которую вы запускаете в оболочке, если вы хотите, чтобы она была неинтерактивной, то есть позволяла вводить команды, даже если предыдущая еще не завершена, вы просто присоединяете "&" к ее концу., Пример:
# prompt is not shown until you close the calculator
$ gnome-calculator
# prompt is shown right after opening calculator and you can
# work on the shell even if you don't close it
$ gnome-calculator &
Возможно, я опаздываю на ответ, но у меня точно такая же проблема, как у вас / была.
Я попытался запустить URL с помощью xdg-open, мой браузер по умолчанию - firefox, а не xdg-open, но firefox запустился с ошибкой:
[user@user-pc ~]$ xdg-open https://www.google.de # the page opens fine, but firefox had an error
[user@user-pc ~]$
(process:3783): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed
# needed to press enter here
xdg-open закрылся нормально, но ошибка firefox осталась, и мне нужно нажать enter, чтобы заставить bash двигаться.
Чтобы справиться с этой проблемой, я вызвал xdg-open в новой оболочке, поместив эти выходные данные в /dev/null:
bash -c "xdg-open https://www.google.de" 2> /dev/null
Страница открылась нормально, ошибки не отображаются - скорее ничего не было показано. И не нужно нажимать Enter.
Я знаю, что это старый вопрос, но я хочу уточнить принятый ответ и ответить на вопрос № 2.
печатает как на стандартный вывод, так и на стандартный поток ввода-вывода в разных обстоятельствах. Примечательно, что если Chrome является вашим браузером по умолчанию и у вас открыто окно, оно печатает
Opening in existing browser session.
на стандартный вывод , и, насколько мне известно, отключить это невозможно (нет--quiet
или похожие). Итак, чтобы подавить это, вам нужноxdg-open URL >/dev/null
(нет2>/dev/null
). Я также заметил, что Firefox в новой установке Ubuntu выводит несколько сообщений об ошибках в stderr , но они, похоже, отражают реальную проблему с настройкой Firefox (я не исследовал это дальше, я только что установил Chrome....).Команда действительно завершается ! Это просто немного сбивает с толку, потому что он запускает асинхронный подпроцесс, и именно этот процесс генерирует этот вывод после того, как оболочка уже вернулась к вам. Вы можете наблюдать это, попробовав
xdg-open URL; sleep 1
в вашей оболочке - выходные данные будут напечатаны до завершения сна и будут выглядеть более нормально.Самый простой способ обойти это (кроме отбрасывания
xdg-open
вывод) — просто нажать Enter в вашей оболочке — это напечатает для вас новую строку приглашения и все снова станет нормальным.