gpt4 book ai didi

linux - bash 脚本中的错误替换

转载 作者:IT王子 更新时间:2023-10-29 01:01:05 25 4
gpt4 key购买 nike

我正在尝试让脚本工作以将交换空间添加到 VPS,作为 la this method. 的解决方法我以为我让它工作了,但现在,每次我收到错误:fakeswap.sh: 5: Bad substitution 每当我尝试这样执行它时:sudo sh fakeswap.sh.

下面是我的代码:

#!/bin/bash

SWAP="${1:-512}"

NEW="$[SWAP*1024]"; TEMP="${NEW//?/ }"; OLD="${TEMP:1}0"

umount /proc/meminfo 2> /dev/null
sed "/^Swap\(Total\|Free\):/s,$OLD,$NEW," /proc/meminfo > /etc/fake_meminfo
mount --bind /etc/fake_meminfo /proc/meminfo

free -m

显然似乎失败的替换在线:NEW="$[SWAP*1024]"; TEMP="${NEW//?/}"; OLD="${TEMP:1}0"

我有点不好意思地说,我真的不明白该行应该发生什么(除了我们似乎声明的变量都是 SWAP 以某种方式派生的事实)。我收集到以下行将新常量替换为虚拟配置文件(因为缺少更好的术语),但我不知道变量 TEMPOLD 是如何工作的定义。

无论如何,我想知道是否有人能够明白为什么这个替换不起作用......甚至可能帮助我理解当 TEMPOLD 时可能发生的事情 有定义吗?

非常感谢!

最佳答案

sh 不是 bashsh shell 无法识别某些有效的 bash 替换。

该脚本的目的是使其可执行。你会这样做

chmod a+x fakeswap.sh

之后你可以简单地通过输入来运行它

./fakeswap.sh

(假设它在当前工作目录中;如果不在,则使用完整路径。)

顺便说一句,TEMP是与NEW长度相等的空格数,OLD是改变最后一个空格的结果在 TEMP0。所以 OLDNEW 具有相同的长度,这意味着 sed 替换不会改变文件的大小。

关于linux - bash 脚本中的错误替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19922244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com