Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 用于在PI模式之间切换的BASH脚本_Linux_Bash_Sed_Raspbian - Fatal编程技术网

Linux 用于在PI模式之间切换的BASH脚本

Linux 用于在PI模式之间切换的BASH脚本,linux,bash,sed,raspbian,Linux,Bash,Sed,Raspbian,我正在尝试为我的Pi3创建一个BASH脚本以及一个桌面图标,该图标将更改分配的gpu内存量,并将图标重命名为未使用的模式 #!/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

我正在尝试为我的Pi3创建一个BASH脚本以及一个桌面图标,该图标将更改分配的gpu内存量,并将图标重命名为未使用的模式

#!/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
我得到一个错误:


有什么想法吗?

尝试使用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

在尝试之前先复制文件当然…

没什么问题<代码>[是元字符,请使用
\[
代替…不能在单引号内使用单引号,请使用
\x27
代替。
桌面模式中的空格导致错误消息显示…工作正常,非常感谢
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