用于快速更改 i3 mod 密钥的 bashscript

用于快速更改 i3 mod 密钥的 bashscript

我正在尝试编写一个 bash 脚本来快速更改 i3 的 $mod 键我将“set $mod Mod4”移动到我的conf的末尾

#!/bin/bash

$1=key
$alt="alt"
$win="win"

sed '$d' /home/fabian/.config/i3/config

if [ "$key" = "$win" ]; then
    echo "set \$mod Mod4" >> /home/fabian/.config/i3/config
    echo
    echo "Changed successfully to win"
else
if [ "$key" = "$alt" ]; then
    echo "set \$mod Mod1" >> /home/fabian/.config/i3/config
    echo
    echo "Changed successfully to alt"
else
    echo "No Flag valid flag set, set alt or win"
fi
fi

两个问题:即使我使用 sudo 运行,sed 命令也不起作用

如果我使用“changeMod.sh alt”运行脚本,它仍然会进入获胜状态并回显“已成功更改为获胜”

如果可能的话我希望脚本插入旧的 $mod+shift+r 来重新加载 i3 conf

你知道这怎么可能吗?

答案1

主要问题是您sed缺少-i允许它就地编辑文件的标志,但您的方法是不安全的 - 如果您多次在没有有效命令的情况下运行脚本,您每次都会从配置中删除一行。你也有很多重复的努力。

这应该以更安全、更简洁的方式实现这一点。创建配置的备份副本,但您可以通过.backupsed行中删除来防止这种情况(取决于您的可用功能sed)。

#!/bin/bash

conf="/home/fabian/.config/i3/config"

case "${1}" in
  (alt) key=Mod1 ;;
  (win) key=Mod4 ;;
  (*)   printf "Invalid key: %s\n" "${1}" ; exit 1 ;;
esac

sed -i.backup 's/^\(set $mod\) .*/\1 '"${key}/" "${conf}" || exit

printf "Changed successfully to %s/%s\n" "${1}" "${key}"

相关内容