Он не запускается на Fedora 30 из-за XDG_SESSION_TYPE=wayland
.
Итак, меняем /usr/bin/gufw
на:
c_user=$(whoami)
pkexec gufw-pkexec $c_user
xhost si:localuser:root
Также проверьте /usr/bin/gufw-pkexec
правильное расположение " gufw.py
"
Мой такой же:
LOCATIONS=(
"/usr/lib/python2.7/site-packages/gufw/gufw.py"
"/usr/lib/python2.7/dist-packages/gufw/gufw.py"
"/usr/share/gufw/gufw/gufw.py"
)
for ((i = 0; i < ${#LOCATIONS[@]}; i++))
do
if [[ -e "${LOCATIONS[${i}]}" ]]; then
python3.7 ${LOCATIONS[${i}]} $1
fi
done
|&
является сокращением для 2>&1 |
(, как задокументировано). Стандартный вывод левой стороны -подключается к стороне записи канала перед выполнением других перенаправлений¹, но стандартная ошибка подключается в конце, независимо от стандартного вывода в данный момент. Это имеет значение, если стандартный вывод перенаправлен или, как в вашем примере, закрыт. С foo 1>&- |& bar
, или с эквивалентным foo 1>&- 2>&1 | bar
, или, если на то пошло, только с foo 1>&- 2>&1
, в файловом дескрипторе 1 ничего нет во время применения перенаправления fd 2 к fd 1.
С помощью foo 1>&2 1>&- | bar
сначала стандартный выход foo
подключается к стороне записи трубы, затем (, предполагая, что multios
включен,)1>&2
создает трубу к встроенному -тройнику. -подобный процесс, который будет записывать как в канал, созданный оператором |
, так и в то, что находится в файловом дескрипторе 2 в момент времени (, который является терминалом ). Затем 1>&-
закрывает стандартный вывод, поэтому, если foo
когда-либо попытается записать в стандартный вывод, эта запись завершится ошибкой. Не имеет значения, сколько мест процесс типа tee -записывает в :после 1>&-
, он никак не может получить какой-либо ввод.
¹ Я не могу найти это указанное в документации,но это то, что традиционно делают оболочки, и это указано в POSIX . Если вы не уверены, вы можете проверить исходный код, трассировку системных вызовов или сделать вывод из результатов различных экспериментов с перенаправлением, таких как те, которые вы проводили.