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

デフォルトでは、目標は特定のセッションで使用するウィンドウマネージャまたはデスクトップ環境の名前を実行または使用することですesxsxうまくいきesxますが、sx$XINITRC値を~/.config/x11/xinitrc私が選択したWM / DEの代わりに$ 1に渡します。sx最初のパラメータを除いて「修正」を試みました。

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

しかし、xinitrcはまだ$ 1を$ XINITRCとして持っています。一時修正で~/.config/x11/xinitrc「$ XINITRC」の場合は、最初の位置パラメータを削除します。

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

sxしかし、私はこの解決策が嫌いで、なぜそれがめちゃくちゃなのか知りたいのです。なぜこれが起こるのか知っている人がいますか?

関連情報