在我的 linux 系统中清除缓存时在 fish 中使用“;and”时出现问题

Problem using ";and" in fish when clearing cache in my linux system

我正在尝试创建一个函数来清除系统中的缓存 according to this page 因此我需要在函数中添加以下命令:

1。仅清除 PageCache。

 sync; echo 1 > /proc/sys/vm/drop_caches

2。清除 dentry 和 inode。

 sync; echo 2 > /proc/sys/vm/drop_caches

3。清除 PageCache、dentry 和 inode。

 sync; echo 3 > /proc/sys/vm/drop_caches 

我想在函数中使用“; and”,将这些命令中的每一个分开,以便在出现错误的情况下不执行下一个命令。 根据 fish documentation,您为此使用 COMMAND1; and COMMAND2。所以我这样做了:

function clearcache
sudo sh -c 'sync; echo 1 > /proc/sys/vm/drop_caches ;and sync; echo 2 > /proc/sys/vm/drop_caches; and sync; echo 3 > /proc/sys/vm/drop_caches'

结束

但是当我执行它时,出现以下错误或警告:

sh: 1: and: not found
sh: 1: and: not found

然后我尝试从语法中删除 "and" 以查看它是否做了一些不同的事情并检查这是否是问题所在,事实上我让它工作了。

user@debian64 /etc> sudo sh -c 'sync; echo 1 > /proc/sys/vm/drop_caches ; sync; echo 2 > /proc/sys/vm/drop_caches; sync; echo 3 > /proc/sys/vm/drop_caches'
user@debian64 /etc>

我的问题是,如何利用 fish 中的 "and" 功能,或者我做错了什么?谢谢

您对 function clearcache 的定义运行 sh -c 下的命令。 sh 不是鱼;它使用 && 来实现 fish 调用 ; and.

的功能

话虽如此,您所做的是多余的。将 3 写入 /proc/sys/vm/drop_caches 与写入 12 具有相同的效果。