微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – bash脚本中的错误替换

我正在尝试让脚本工作以将交换空间添加到VPS,作为一种解决方法,我认为我已经使用它但是现在,每次我收到错误:fakeswap.sh:5:每次尝试时都会有错误的替换如此执行: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定义时可能会发生什么?

提前谢谢了!

解决方法:

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

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

chmod a+x fakeswap.sh

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

./fakeswap.sh

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐