我想要一个命令来打开终端并执行我的aliases.zsh
.该函数的定义如下:
my-function() {
wget some stuff
do some other stuff
}
我尝试过gnome-terminal -- my-function
,但新终端报告了这一点Failed to execute child process “my-function” (No such file or directory)
。如果我这样做,也会发生类似的情况gnome-terminal -- /bin/zsh -c 'my-function; sleep 1; exec zsh'
:在新终端中,zsh 报告zsh:1: command not found: my-function
。
非常感谢任何帮助。
答案1
~/.zshrc
是交互式调用的自定义文件zsh
。
zsh -c 'some code'
是一个内联脚本。就像以#! /bin/zsh -
shebang 开头的脚本一样,幸运的是,它~/.zshrc
不是在启动时获取的。如果是,并且您有别名/函数可以更改标准命令的行为(这种情况并不罕见alias 'ls=ls --color -F' 'grep=grep --color;
......),则可能会破坏 zsh 脚本。
如果您希望加载脚本~/.zshrc
或~/.zprofile
或/etc/zsh/zshrc
,您需要显式请求它。但最好的办法是将这些函数放在一些函数中~/.zsh/some-library.zsh
,并将其放在需要它的脚本以及您的脚本中~/.zshrc
,或者使用autoload
框架。
gnome-terminal -- zsh -c '. ~/.zsh/some-library.zsh; myfunction'
如果您想要启动交互式 zsh gnome-terminal
,但在发出第一个提示之前首先运行您的函数,您可以添加:
eval -- $ZSH_INIT_COMMAND
unset ZSH_INIT_COMMAND
到你的末尾~/.zshrc
,然后运行gnome-terminal
:
gnome-terminal -- env ZSH_INIT_COMMAND='myfunction; echo and whatever else' zsh
或者,如果您想像在提示符下编写一样启动它,这样您就可以以相同的方式处理它,请将其更改为:
if (( $+ZLE_INIT )); then
seed-zle() {
BUFFER=$ZLE_INIT
unset ZLE_INIT
zle -D zle-line-init
unset -f seed-zle
zle accept-line
}
zle -N zle-line-init seed-zle
fi
并启动 gnome-terminal:
gnome-terminal -- env ZLE_INIT='myfunction; echo and whatever else' zsh