fish - 将函数参数传递给多个命令 [fish shell]
问题描述
我检查了fish
文档,但没有找到我需要的东西(或者如果我找到了,我不明白)。
我做了一个功能,fish
在一段时间后暂停我的电脑:
function ss --d 'sleeps the pc after specified time'
sleep $argv && systemctl suspend
end
然后我打字ss 20s
,它会在 20 秒内关闭电脑。
但是如果我想将标志传递给systemctl suspend
? 我还需要$argv
在函数中的那个命令之后吗?
我确实尝试了类似的东西,但我得到了一个Too many arguments
错误。
解决方案
首先,我认为Too many arguments
来自将任何额外的参数传递给systemctl suspend
. 据我所知,它没有任何其他选项,是吗?即使我打电话sudo systemctl suspend help
(或任何作为额外参数的东西),我也会得到同样的错误。
但是至于如何构造一个函数来处理将不同的参数传递给多个命令......
你在第二点上是对的。文档涵盖了它,但我绝对理解新用户可能很难知道他们在寻找什么。fish
即使在使用了一年多之后,再次阅读文档时,我仍然会发现“对我来说很新”的东西。
希望通过指出相关信息,它会更有意义。别担心,我也会给你“答案”,但我想确保你具备理解它所需的背景。
首先,在简介 - 功能部分,关键要点是:
$argv 是一个列表变量
从那里,我们需要知道如何使用列表变量。有两个部分涵盖了这一点。第一个函数 - 列表,第二个,如何通过索引访问列表变量内容。
请注意,与许多语言不同,fish
索引从 1 开始。因此,您的sleep
参数(您传入的第一个数字将是$argv[1]
。当然,第二个,$argv[2]
等等。因此,如果您只需要两个参数,这就是您所需要的。
但是,如果您希望将“所有其余参数”(无论有多少)传递给systemctl suspend
,那就有点棘手了。那将是$argv[2..-1]
,这意味着“通过最后一个参数的第二个参数”。
所以应该是:
function ss --d 'sleeps the pc after specified time'
sleep $argv[1] && systemctl suspend $argv[2..-1]
end
当然,这再次假设您suspend
首先要传递一个有效的参数。
推荐阅读
- dask - 有没有办法增量更新 Dask 元数据文件?
- xcode - 如何将“选择代码结构”从 cmd + 单击更改为键绑定?
- tensorflow - TensorFlow:如何将图像转换为一维张量?
- amazon-web-services - 如何提供对我的 AWS S3 存储桶的经过身份验证的访问?
- python - 使用 django-recpatcha 和 django-crispy-forms 发送电子邮件的问题
- vb.net - Aspose.Pdf 找不到它的许可文件
- python - 在另一个字典中迭代和附加字典值
- java - 无法在 Morphia 中修改 @Embedded 列表
- python - python中的android权限使用request_permissions
- typescript - Can't put boolean type in TypeScript select tag