Изменение поведения xdg-open

Я довольно часто использую команду xdg-open в своем терминале Ubuntu Linux. Однако меня раздражают две вещи:

  1. Можно ли подавить сообщения об ошибках?

  2. Можно ли заставить команду всегда завершать? (То есть не продолжать работу, так что у меня есть еще одна "новая линия" в моем терминале).

Я понимаю, что 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.

  1. печатает как на стандартный вывод, так и на стандартный поток ввода-вывода в разных обстоятельствах. Примечательно, что если Chrome является вашим браузером по умолчанию и у вас открыто окно, оно печатаетOpening in existing browser session.на стандартный вывод , и, насколько мне известно, отключить это невозможно (нет--quietили похожие). Итак, чтобы подавить это, вам нужноxdg-open URL >/dev/null(нет2>/dev/null). Я также заметил, что Firefox в новой установке Ubuntu выводит несколько сообщений об ошибках в stderr , но они, похоже, отражают реальную проблему с настройкой Firefox (я не исследовал это дальше, я только что установил Chrome....).

  2. Команда действительно завершается ! Это просто немного сбивает с толку, потому что он запускает асинхронный подпроцесс, и именно этот процесс генерирует этот вывод после того, как оболочка уже вернулась к вам. Вы можете наблюдать это, попробовавxdg-open URL; sleep 1в вашей оболочке - выходные данные будут напечатаны до завершения сна и будут выглядеть более нормально.

    Самый простой способ обойти это (кроме отбрасыванияxdg-openвывод) — просто нажать Enter в вашей оболочке — это напечатает для вас новую строку приглашения и все снова станет нормальным.

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