如果没有以 exec 为前缀,startx 函数/别名的参数有错误

如果没有以 exec 为前缀,startx 函数/别名的参数有错误

对于上下文,我的文件/目录结构和内容大部分是从 Luke Smith 的点文件中复制的(空米)。此外,代码块中的“...”行不是代码,代表文件中省略的行。

我的~/.zprofile

#!/bin/zsh
...
export XINITRC="${XDG_CONFIG_HOME:-$HOME/.config}/x11/xinitrc"

这在我的别名文件中~/.zshrc来源(~/.config/shell/aliasrc):

#!/bin/bash
...
esx() { exec startx "$XINITRC" "$@" -- -keeptty >~/xorg.log 2>&1; }
sx() { startx "$XINITRC" "$@" -- -keeptty >~/xorg.log 2>&1; }

(函数命令中的“--”部分用于记录

看起来~/.config/x11/xinitrc像这样:

#!/bin/sh
sysresources="/etc/X11/xinit/.Xresources"
userXprofile="${XDG_CONFIG_HOME:-$HOME/.config}/x11/xprofile" # empty file atm
[ -f "$sysresources" ] && xrdb -merge "$sysresources"
xrdb -merge ${XDG_CONFIG_HOME:-$HOME/.config}/x11/xresources & xrdbpid=$!
if [ -d /etc/X11/xinit/xinitrc.d ] ; then
 for f in /etc/X11/xinit/xinitrc.d/?*.sh ; do
  [ -x "$f" ] && . "$f"
 done
 unset f
fi
if [ -f "$userXprofile" ]; then
    . "$userXprofile"
else
    . "$HOME/.xprofile"
fi
[ -n "$xrdbpid" ] && wait "$xrdbpid"
case $1 in
   awesome|awesomeWM) exec awesome;;
   xfce|xfce4) exec startxfce4;;
   openbox) exec openbox;;
esac

基本上,目的是使用我想要用于该特定会话的任何窗口管理器或桌面环境的名称来运行esx或。sx它可以正常工作esx,但sx会将 $XINITRC 的值传递为~/.config/x11/xinitrc$1 而不是我选择的 WM/DE。我尝试sx通过排除第一个参数来“修复”:

sx() { startx "$XINITRC" "${@:2}" -- -keeptty >~/xorg.log 2>&1; }

但 xinitrc 仍然有 $1 作为 $XINITRC。作为创可贴修复,~/.config/x11/xinitrc如果第一个位置参数是“$XINITRC”,则将其删除:

[ "$1" = "$XINITRC" ] && shift
case $1 in
...

但我讨厌这个解决方案,并且更想知道为什么sx会搞砸。有谁知道为什么会发生这种情况?

相关内容