2017-06-19 61 views
1

我正在嘗試爲我的Pi3創建一個BASH腳本以及一個桌面圖標,它將更改分配的gpu_mem的數量並將該圖標重命名爲未使用的模式。BASH腳本在PI模式之間切換

#!/bin/bash 

s1=$(grep gpu_mem /boot/config.txt) 
s2="gpu_mem=156" 

if [ "$s1" == "$s2" ] 
      then 
       sudo sed -i 's,^\(gpu_mem=\).*,\1'512',' /boot/config.txt 
       sed -i 's,^\(Name[en_GB.UTF-8]=\).*,\1'Desktop Mode',' \ 
       /home/pi/Desktop/GPUMode.desktop 

       else 
       sudo sed -i 's,^\(gpu_mem=\).*,\1'156',' /boot/config.txt 
       sed -i 's,^\(Name[en_GB.UTF-8]=\).*,\1'Game Mode',' \ 
       /home/pi/Desktop/GPUMode.desktop 
      fi 

現在腳本的內存分配部分工作正常,但是當我執行下面的代碼爲測試目的而行:

sed -i 's,^\(Name[en_GB.UTF-8]=\).*,\1'Desktop Mode',' \ 
/home/pi/Desktop/GPUMode.desktop 

我得到的錯誤:

sed: -e expression #1, char 34: unterminated `s' command 

有任何想法嗎?

+0

幾個問題...'['是元字符,使用'\ ['相反......你不能在單引號內使用單引號,而是使用'\ x27'而不是'Desktop Mode'中的空格導致顯示錯誤消息... – Sundeep

+0

明白了,它非常感謝 –

回答

2

試試這個,而不是使用GNU的awk,而不是GNU sed的就地爲編輯:

sudo awk -i inplace ' 
BEGIN { FS=OFS="="; game_mem=156; desk_mem=512 } 
(ARGIND == 1) && ($1 == "gpu_mem") { 
    if ($2 == game_mem) { 
     $2 = desk_mem 
     mode = "Desktop" 
    } 
    else { 
     $2 = game_mem 
     mode = "Game" 
    } 
} 
(ARGIND == 2) && ($1 == "Name[en_GB.UTF-8]") { 
    $2 = mode " Mode" 
} 
{ print } 
' /boot/config.txt /home/pi/Desktop/GPUMode.desktop 

試圖當然這之前,你的文件複製...