4

我正在尝试让脚本工作以将交换空间添加到 VPS,作为这种方法的解决方法。 我以为我让它工作了,但现在,每次我得到错误: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 的衍生物)。TEMP我收集到下面的行将新常量替换为虚拟配置文件(因为缺少更好的术语) ,但我不知道变量OLD是如何定义的。

无论如何,我想知道是否有人能够看到为什么这种替换不起作用......甚至可以帮助我理解在定义TEMP时可能会发生什么?OLD

提前谢谢了!

4

1 回答 1

9

sh不是bashshshell 不能识别一些有效的bash替换。

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

chmod a+x fakeswap.sh

之后,您只需键入即可运行它

./fakeswap.sh

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

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

于 2013-11-12T06:40:45.107 回答