小编pse*_*ert的帖子

覆盖和重用 zsh 中的现有函数

我想稍微扩展一个 zsh 完成功能。

我想避免将完整的函数体放入我的 homedir 中,只更改一行。相反,我想拦截它的调用,然后自己调用原始函数。在准代码中:

<make sure _the_original_function is loaded>
_backup_of_original_function=_the_original_function

_the_original_function() {
   _arguments "-superduper[that one option I always need]"
   _backup_of_originial_function $@
}
Run Code Online (Sandbox Code Playgroud)

在我的具体案例中,我几乎在所有项目中都有一个 cmake 属性,因此我想修改 cmake 完成。在完成时没有该选项会比在不属于该选项的项目中更让我烦恼。因此,_cmake我不会_cmake_define_common_property_names()在某处复制,而是在我的.zshrc:

_cmake_define_common_property_names() {
  local properties; properties=(
    'MY_GREAT_OPTION:be awesome'
  )                    

  _describe -t 'my-property-names' 'my property name' properties $@

  **call original _cmake_define_common_property_names here
}  
Run Code Online (Sandbox Code Playgroud)

所以缺少的是加载_cmake_define_common_property_names并为其分配一个新的函数名称。

这里我试过

autoload -Uz +X _cmake_define_common_property_names
Run Code Online (Sandbox Code Playgroud)

但这失败了(该函数不是在它自己的文件中定义的,而是在_cmake.

注意:我没有分配新的函数名称以避免必须修改原始版本中调用函数的位置。

部分有效的是,autoload -Uz +X _cmake但这只能确保_cmake加载(我通过调用验证functions _cmake …

zsh function

6
推荐指数
1
解决办法
872
查看次数

将别名转发给子进程

/etc/zprofile我有一些在(或/etc/profilebash)中定义的别名。也在$PATH那里被操纵。

我想从避免操作的 shell 启动交互式 shell $PATH。我通过使用选项启动它来做到这一点-f。然而,在父 shell 中定义的别名很有用,我想将它们转发给子进程。

将一次定义的别名复制并/etc/zprofile粘贴到文本文件中,并在每次启动另一个 shell 时获取它,这并不是我想要的,因为定义会/etc/zprofile得到维护,并且可能会随着时间的推移而改变。

您对如何将别名转发到第二个 shell 有建议吗?

(我的主要兴趣是zsh解决方案,但我bash也对解决方案感到好奇)

我认为情况是这样的

# log in with ssh
shell1 > echo "here aliases are the way I want them to be"
shell1 > VARIABLE1=value1 VARIABLE2=value2 PATH=some_paths zsh
shell2 > echo "/etc/zprofile prepended something to PATH, which I don't like"
shell2 > echo "aliases are good"
shell2 > exit
shell1 > VARIABLE1=value1 …
Run Code Online (Sandbox Code Playgroud)

bash zsh alias

5
推荐指数
1
解决办法
2418
查看次数

如何指定 gtk-launch 使用哪个终端

正如此处所讨论的,gtk-launch 可以直接启动应用程序,也可以在终端窗口中启动应用程序,具体取决于文件是否.desktop指定应用程序在终端中运行。在我看来,这个终端不是来自x-terminal-emulator替代系统的(当我更新替代系统时它不会改变)。

有没有办法指定gtk-launch应使用哪个终端模拟器?

terminal-emulator .desktop

5
推荐指数
1
解决办法
1672
查看次数

通过换行符从 subshel​​l 拆分 zsh 数组

我想从子外壳实例化 zsh 数组

myarray=($(somecommand)
Run Code Online (Sandbox Code Playgroud)

我检查我是否收到了我想要的东西

for element in $myarray ; do echo "===" ; echo $element ; echo "---" ; done
Run Code Online (Sandbox Code Playgroud)

默认情况下,我看到空格(空格和换行符)用于分隔元素。

我还发现我可以使用${(s:-:)"$(somecommand)"}分隔 by -,在这种情况下,空格和换行符不会破坏元素(即数组元素可以包含换行符)。

到目前为止,我仅在换行符处无法拆分。即如果somecommand返回

Alice
Bob
Arthur C Clarke
Neo
Thomas Anderson
Run Code Online (Sandbox Code Playgroud)

我希望我上面的for循环打印:

===
Alice
---
===
Bob
---
===
Arthur C Clarke
---
===
Neo
---
===
Thomas Anderson
---
Run Code Online (Sandbox Code Playgroud)

我如何做到这一点?(并且可能会指示在手册中查找的位置。)

zsh array shell-script

5
推荐指数
1
解决办法
1673
查看次数

标签 统计

zsh ×3

.desktop ×1

alias ×1

array ×1

bash ×1

function ×1

shell-script ×1

terminal-emulator ×1