如何将参数传递给自定义 zsh 函数?

2023-12-27

如何将参数传递给自定义 zsh 函数?
例如:

function kill_port_proc(port) {
    lsof -i tcp:<port interpolated here>| grep LISTEN | awk '{print $2}'
}

我在网上看到很多使用 ZSH 函数的示例,但几乎没有任何关于传递参数和插入它们的内容。


定义函数时,不能指定必需的参数。这就是为什么同时使用function关键字和括号()对我来说似乎没用。

要获取传递的参数,请使用位置参数 http://zsh.sourceforge.net/Doc/Release/Parameters.html#Positional-Parameters.

位置参数提供对 shell 函数的命令行参数的访问、shell 脚本或 shell 本身; [...]

参数n, where n是一个数字,是n第一个位置参数。参数$0是一个特殊情况[...]

有关$0位置参数:

用于调用当前 shell 的名称,或在调用时由 -c 命令行选项设置的名称。

If the FUNCTION_ARGZERO选项已设置,$0在进入 shell 函数时设置为函数名,并在输入源脚本时输入脚本名称,并在函数或脚本返回时重置为其先前的值。

使用你的例子:

function kill_port_proc {
    lsof -i tcp:"$1" | grep LISTEN | awk '{print $2}'
}

就我个人而言,我喜欢至少通过在定义之前添加函数签名来记录函数。

然后,当我想保护每个参数和只读参数免受意外修改时,我会声明它们的本地参数。

如果参数是强制性的,我使用特殊的参数扩展 http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion form:

${name?word}

${name:?word}

在第一种形式中,如果设置了名称,或者在第二种形式中如果名称既已设置且非空,然后代入其值;

否则,打印 word 并退出 shell。交互式 shell 而是返回到提示符。

如果省略单词,则打印标准消息。

我会如何写你的例子:

# kill_port_proc <port>
function kill_port_proc {
    readonly port=${1:?"The port must be specified."}

    lsof -i tcp:"$port" | grep LISTEN | awk '{print $2}'
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将参数传递给自定义 zsh 函数? 的相关文章

  • Z Shell“自动加载”内置 - 它有什么好处?

    我已经使用 Z shell 一段时间了 我开始感到好奇 我在编写自己的函数时偶然发现的一件事是 自动加载 根据 zshbuiltins 1 手册页autoload是 相当于functions u 有一个例外 它 相当于typeset f 有
  • git show HEAD^ 似乎不起作用。这是正常的吗?

    我正在使用 Zsh 并尝试为项目运行 git show 以查看我的修订历史记录 如果我做 git show HEAD 它可以很好地向我显示我的最后一次提交 但是以下命令不起作用 master 5 project git show HEAD
  • 从 docker-compose 中退出代码打破 while 循环

    我有一个案例 有一个 WordPress 项目 我应该在其中创建一个脚本来更新插件并将源代码更改提交到单独的分支 在这样做时我遇到了一个奇怪的问题 输入变量 akimset 4 0 3 all in one wp migration 6 7
  • 缩短 Zsh 中的提示

    我在让 zsh 缩短提示符时遇到了很多麻烦 我目前正在使用带有 agnoster 主题和 oh my zsh 包管理器的 zsh 目前 我的提示在工作期间变得非常长 通常约为 110 个字符 占据了我的终端的整个长度 这在美观上不太令人愉悦
  • 在文件和文件夹的名称中递归地填充 0

    我有一个文件夹 其中包含有关某个特定主题的视频讲座 它的结构如下 1 fol 1 file mp4 2 file mp4 3 file mp4 2 fol 10 file mp4 4 file mp4 5 file mp4 6 file m
  • 如何覆盖现有的 zsh 键盘补全?

    我想让 zsh 能够自动完成 yast2 一个 OpenSuSE 控制面板 的模块 但它似乎已经定义了一些东西 我可以跑 compctl k hello world nonexistantprogram 很好 但是 compctl k he
  • 如何在终端中显示 git 用户 (oh-my-zsh)

    我很喜欢 oh my zsh 并享受其中飞船提示 https github com denysdovhan spaceship prompt 就像它显示我的 git 分支和状态一样 我怎样才能让它在旁边显示我当前的 git 用户 之所以问这
  • 让 Python 虚拟环境、Fabric 和 Sudo 协同工作

    重现步骤 在 Linux 环境中 在桌面上创建一个名为 fab 的文件夹 仅供参考 我正在使用 zsh cd to Desktop fab 运行这个fabfile py通过发出在您的 fab 目录中制作fab init usr bin en
  • Mac 终端重新启动后无法运行大多数命令

    我正在使用Mac 我有一个定制终端zsh 有一段时间就好了 但在我重新启动计算机后 它的行为开始有所不同 终端停止运行命令 例如rake or rails 我已经使用rails创建了应用程序 但是使用了类似的rails命令rails v现在
  • BASH_REMATCH 不捕获

    我正在尝试捕获 bash 中路径的一部分 Input Users foo virtualenvs venv test server Code bin zsh regex venv if VIRTUAL ENV regex then echo
  • 卸载 oh-my-zsh 时遇到问题?

    我在 OSX 上 想要切换回原来的 zsh 配置哦我的zsh http github com robbyrussell oh my zsh 但是当我运行uninstall脚本它给了我一个错误 sudo uninstall oh my zsh
  • 未找到获取命令:rasa 使用 rasa 命令

    我已经安装了rasa using pip3 install rasa 当我尝试使用时rasa命令如 rasa init 我收到 zsh 错误 找不到命令 rasa 错误 我在 Mac OS Catalina 上使用 Python版本2 7
  • Bower、Grunt 和 zsh:未找到命令:

    我已经安装了 Grunt Bower 我正在使用 ZSH 当我打字时bower help or grunt anything I get zsh command not found bower or zsh command not foun
  • 正则表达式 [A-Za-z] 似乎不包含字母 W 和 w

    由于某种原因 我不知道为什么 也许我的系统或我的大脑有些不对劲 正则表达式 A Z 似乎无法识别字母 W 和 a z 似乎不认识字母 w 例子 for x in A a B b C c D d E e F f G g H h I i J j
  • 在 Mac OS Lion 上使用 tmux 提示之前出现奇怪的空格

    它刚刚发生在我的 Lion 系统上 我正在使用 zsh 和 tmux 在 zsh shell 中正常 tmux 屏幕中的双倍空间 我是否缺少 zsh 或 tmux 中的某些配置 使用 u 选项启动 tmux 以实现 unicode 功能 看
  • VSCode 终端任务不使用 zsh 配置文件

    我正在尝试在 VSCode 中的窗口加载上运行任务 其中终端打开并且nvm use yarn dev默认运行 但是 运行此 shell 任务似乎不会加载我的 zsh 配置文件 我运行任务得到的输出是 The terminal process
  • 使用通配符在 .zshrc 中获取多个文件

    我通过 oh my zsh 使用 z shell 我想从 zshrc 文件中获取多个别名文件 这样我就可以让事情井井有条 我已经为别名文件添加了前缀 alias 这样我就可以通配符加载它们 但是 打电话给source alias 只加载第一
  • zsh 自动完成 ssh 速度较慢

    我最近将我的 MacBook 升级到了 OSX Catalina 自从升级后 我的 ssh 的 zsh 自动完成 制表符完成 非常慢 以前 它相当快 例如自动完成会在几秒钟内发生 我认为相关的一些细节 我有一个 ssh config配置了约
  • LaunchAgent 不运行 shell 脚本

    在 Catalina 之前的 macOS 下 我有一个每天运行 shell 脚本的 LaunchAgent 升级并切换到 zsh 后 它不起作用 我检查过的事情 shebang 切换到 zsh shell脚本可以从命令行手动执行 sh 在系
  • zsh:命令替换和正确引用

    我有一个脚本P它接受文件名作为参数 P file1 file2 file3 我也有一个脚本G它生成一个 通常是短列表 文件名 每行一个文件名 在我想写的主脚本中zsh 我想用G生成要处理的文件名P 天真的尝试是这样的 P G 这几乎很有效

随机推荐