Bash

用於快速更改 i3 mod 鍵的 bashscript

  • April 22, 2022

我正在嘗試編寫一個 bash 腳本來快速更改 $ mod key of i3 i moved the “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

你知道這怎麼可能嗎?

主要問題是您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}"

引用自:https://unix.stackexchange.com/questions/699953