我正在尝试让脚本工作以将交换空间添加到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
Run Code Online (Sandbox Code Playgroud)
很明显,似乎失败的替代是在线: NEW="$[SWAP*1024]"; TEMP="${NEW//?/ }"; OLD="${TEMP:1}0"
我有点惭愧地说我真的不明白应该在那条线上发生什么(除了我们似乎在某种程度上声明变量都是SWAP的衍生物之外).据我了解,下面替代新常量行成一个虚拟的配置文件(没有更好的术语),但我不明白如何变量TEMP和OLD被定义.
无论如何,我想知道如果任何人可以看到为什么这种替代是不工作...也许甚至帮助我了解什么可能是发生在TEMP和OLD定义?
提前谢谢了!
sh不是bash.该sh外壳不能识别一些有效的bash替代.
该脚本的目的是它是可执行的.你会这样做的
chmod a+x fakeswap.sh
Run Code Online (Sandbox Code Playgroud)
之后你可以通过输入来运行它
./fakeswap.sh
Run Code Online (Sandbox Code Playgroud)
(假设它在当前工作目录中;如果不在,则使用完整路径.)
顺便说一句,TEMP是一个数字的空间等于的长度NEW和OLD在改变的最后空间的结果TEMP来0.所以OLD并且NEW具有相同的长度,这意味着sed替换不会改变文件的大小.