i3 모드 키를 빠르게 변경하는 bashscript

i3 모드 키를 빠르게 변경하는 bashscript

i3의 $mod 키를 빠르게 변경하기 위해 bash 스크립트를 작성하려고 합니다. "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시간. 노력의 중복도 많이 있습니다.

이는 보다 안전하고 깔끔한 방법으로 이를 달성해야 합니다. 구성의 백업 복사본을 생성하지만 사용 가능한 기능에 따라 이를 라인 .backup에서 제거하여 이를 방지할 수 있습니다 .sedsed

#!/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}"

관련 정보