![为什么这个用于删除缓存的 bash 脚本不起作用?](https://linux22.com/image/1096268/%E4%B8%BA%E4%BB%80%E4%B9%88%E8%BF%99%E4%B8%AA%E7%94%A8%E4%BA%8E%E5%88%A0%E9%99%A4%E7%BC%93%E5%AD%98%E7%9A%84%20bash%20%E8%84%9A%E6%9C%AC%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%EF%BC%9F.png)
我正在尝试编写一个 bash 脚本来清除我的 RAM 缓存。
以下是我目前所掌握的信息:
#! /bin/bash
free -m
sync
sudo -s
echo 3 > /proc/sys/vm/drop_caches
但它不能完全工作。前三个命令运行正常,但在第四个命令时它退出。
请解释。
答案1
sudo -s
创建登录 shell 会话。然后退出后,您将返回到普通用户身份。然后它执行第 4 行,但此时您不是 root 用户,因此失败。
您不能简单地将 sudo 放在 echo 语句前面,因为那是一个内置命令。
所以尝试一下这个:
#!/bin/bash
free -m
sync
sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"
从男人须藤:
-s [命令] -s(shell)选项运行 SHELL 指定的 shell 如果设置了环境变量,或者 passwd(5) 中指定的 shell。 如果指定了命令,则该命令将被传递给 shell 执行。 否则,将执行交互式 shell。
答案2
使用非 su 命令后使用 sudo 命令或将 sudo 命令移至另一个脚本。您可以对它们进行计时(例如释放内存)
echo "free -m" | at 7:00
我相信