Это бессмысленно.
Так обрабатывается ksh93
, если для унарного оператора слишком много аргументов и унарный оператор начинается с -
, тогда второй будет выбран в качестве аргумента и остальные будут проигнорированы:
$ ksh -c '[ -f a.out foo bar ] && echo yes'
yes
$ ksh -c '[ -e a.out foo a ] && echo yes'
yes
(За исключением случаев, когда второй аргумент -a / -o
, он не будет проигнорирован)
Проверка источника ksh93 test
подтверждают такое поведение.
Также выполняется strace
:
$ { strace -p "$$" & sleep 1; [ -f a.out -size +0 ]; kill "$!"; }
[1] 18467
Process 18455 attached
restart_syscall(<... resuming interrupted call ...>) = 0
stat(".", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("a.out", {st_mode=S_IFREG|0755, st_size=8320, ...}) = 0
kill(18467, SIGTERMProcess 18455 detached
Другие оболочки, подобные Борну, сообщают об ошибке в этом случае. Поведение не определено POSIX.
Если вы хотите проверить, существует ли файл и имеет ли его размер больше 0, то стандартные оболочки имеют тестовый оператор -s
:
[ -s file ] && echo 'file exist and size greater than 0'
ksh88
также ведут себя так же. С моей виртуальной машиной Solaris 10:
$ ksh -c '[ -f a.out foo bar ] && echo yes'
yes
$ strings /usr/bin/ksh | grep -i version
@(#)Version M-11/16/88i
оболочки Pre-POSIX также ведут себя так же, включая оболочку Bourne в Solaris 10, семейную оболочку Bourne, Schily osh и Schily sh.
Я немного поискал, и я удивлен, что не нашел готового решения для этого. Можно было бы использовать KWin и написать для него «эффект Квина»: https://blog.martin-graesslin.com/blog/2009/07/how-to-write-a-kwin-effect/ . Кроме того, возможно расширение оболочки gnome, но оно еще не существует.
Обходной путь: Weston — эталонная реализация Wayland. Это позволяет вращать окна с помощью супер-клавиши + средней кнопки мыши. Поскольку это работает только для клиентов Wayland, вы можете запускать Xwayland в Weston, запускать X-приложение в Xwayland и поворачивать дисплей Xwayland. Если ваше приложение поддерживает Wayland (например, на основе GTK3, QT5 или SDL), это работает в Weston без Xwayland.
Для X-приложений в Xwayland
weston
WAYLAND_DISPLAY=wayland-0 Xwayland :5
DISPLAY=:5 yourXapplication
DISPLAY=:5 x-window-manager # additionally run a window manager for comfort
(В Gnome-Wayland вы можете запускать Xwayland напрямую без использования Weston, но я не знаю о опции Gnome-Wayland для поворота окна).
Для приложений QT5 без Xwayland:
weston
WAYLAND_DISPLAY=wayland-0 QT_QPA_PLATFORM=wayland yourQT5application
Для приложений GTK3 и SDL без Xwayland:
weston
WAYLAND_DISPLAY=wayland-0 yourGTK3application
(Примечание. Вы можете указать сокет wayland/WAYLAND_DISPLAY с помощью weston --socket=mywaylandsocket
вместо предположения это будет wayland-0
. Вам нужно сделать это на Gnome-Wayland, так как он использует сам wayland-0
)
Я добавляю второй ответ, используя Уэстон, немного отличающийся и более полезный, чем мой первый.
Создайте файл ~/.config/weston.ini
со следующим содержимым:
[core]
modules=xwayland.so
shell=desktop-shell.so
idle-time=0
[shell]
background-color=0xff002244
locking=false
# panel-location=none
[launcher]
icon=/usr/share/icons/gnome/24x24/apps/utilities-terminal.png
path=/usr/bin/weston-terminal
[launcher]
icon=/usr/share/icons/hicolor/48x48/apps/firefox.png
path=/usr/bin/firefox
[output]
name=X1
mode=600x800
transform=90
# wanna get mad? use: transform=flipped-270
scale=1
Этот weston.ini
включает безрутовый xwayland.so
в weston.
Раздел [output]
с name=X1
определяет внешний вид Weston как X-клиента.
mode=600x800
устанавливает размер экрана/окна. transform=90
поворачивает дисплей Вестона. scale=1
устанавливает коэффициент масштабирования, если необходимо. [launcher]
можно использовать для создания пользовательских стартовых панелей для ваших X-приложений. См. man weston.ini
и /usr/share/doc/weston/examples/weston.ini
для получения дополнительной информации и вариантов.
(Вместо того, чтобы использовать панель weston, вы можете отключить ее с помощью panel-location=none
, проанализировать вывод weston для прослушивания xserver на дисплее: 1
и использовать DISPLAY=:1 вашеXapp
)