Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell .zshrc文件中存在别名错误_Shell_Zsh - Fatal编程技术网

Shell .zshrc文件中存在别名错误

Shell .zshrc文件中存在别名错误,shell,zsh,Shell,Zsh,我在macOS中的.zshrc文件中的en别名有问题。 以下是别名: alias update='sudo softwareupdate -i -a; brew update; for i in $(brew cask outdated --quiet); do brew cask reinstall $i; done; brew cleanup -r; gem update --system; gem update; upgrade_oh_my_zsh; npm update -g; for

我在
macOS
中的
.zshrc
文件中的en别名有问题。 以下是别名:

alias update='sudo softwareupdate -i -a; brew update; for i in $(brew cask outdated --quiet); do brew cask reinstall $i; done; brew cleanup -r; gem update --system; gem update; upgrade_oh_my_zsh; npm update -g; for x in $(pip3 list -o --format=columns | sed -n '3,$p' | cut -d' ' -f1); do pip3 install $x --upgrade; done';
当我叫它时,外壳回答我:

-对于cmdsubst>


我找不到问题的根源。

问题的症结似乎是您使用单引号来定义别名,但您也尝试在别名中使用单引号。这将中断zsh在定义
别名foo=string
时需要查看的连续字符串。通过结束、转义引号并重新开始,可以在单引号字符串中使用单引号。例如:

alias foo='command '\''$1'\'' another-arg'
或者,要在末尾包含引号,只需结束引号字符串并仅转义一个引号:

echo 'this is a single quote: '\'

问题的症结似乎在于您使用单引号来定义别名,但您也尝试在别名中使用单引号。这将中断zsh在定义
别名foo=string
时需要查看的连续字符串。通过结束、转义引号并重新开始,可以在单引号字符串中使用单引号。例如:

alias foo='command '\''$1'\'' another-arg'
或者,要在末尾包含引号,只需结束引号字符串并仅转义一个引号:

echo 'this is a single quote: '\'
类似的问题是,不可能在单引号中使用单引号

在这种情况下,我建议创建一个函数而不是别名,而不是围绕引用展开工作

这样,您就只需要在命令行中引用所需的引号。我认为它还提高了可读性,使编辑更容易。(当然,也可以有多行别名定义)

类似的问题是,不可能在单引号中使用单引号

在这种情况下,我建议创建一个函数而不是别名,而不是围绕引用展开工作


这样,您就只需要在命令行中引用所需的引号。我认为它还提高了可读性,使编辑更容易。(当然,也可以有多行别名定义)

如果我理解正确,如果我在别名的开头和结尾加上双引号,这通常能解决问题吗?>alias update=“sudo softwareupdate-i-a;brew update;for i in$(brew桶过时-安静);do brew桶重新安装$i;done;brew cleanup-r;gem update-system;gem update;upgrade_oh_my_zsh;npm update-g;for x in$(pip3列表-o--格式=列| sed-n'3,$p'| cut d'-f1);do pip3安装$x--升级;done”是的,没问题。我明白了。>alias update='sudo softwareupdate-i-a;brew更新;以美元表示的i(酿造桶已过时——安静);不要重新安装$i;完成;brew清理-r;gem更新——系统;创业板更新;升级_oh_my_zsh;npm更新-g;对于美元中的x(pip3列表-o--format=columns | sed-n'\''3,$p'\''cut-d'\''-f1);pip3是否安装$x--升级;完成“谢谢你,如果我理解正确,如果我在别名的开头和结尾加上双引号,这通常能解决问题吗?”alias update=“sudo softwareupdate-i-a;brew update;for i in$(brew桶过时-安静);do brew桶重新安装$i;done;brew cleanup-r;gem update-system;gem update;upgrade_oh_my_zsh;npm update-g;for x in$(pip3列表-o--格式=列| sed-n'3,$p'| cut d'-f1);do pip3安装$x--升级;done”是的,没问题。我明白了。>alias update='sudo softwareupdate-i-a;brew更新;以美元表示的i(酿造桶已过时——安静);不要重新安装$i;完成;brew清理-r;gem更新——系统;创业板更新;升级_oh_my_zsh;npm更新-g;对于美元中的x(pip3列表-o--format=columns | sed-n'\''3,$p'\''cut-d'\''-f1);pip3是否安装$x--升级;完成“谢谢你为什么要使用别名?函数可以避免所有问题。为什么要使用别名?一个函数可以避免所有的问题。我想指出一个。诚然,zsh消除了POSIX中的一些错误决定,但人们在zsh中学习的习惯往往会在其他地方产生。@charlesduff是的,这是一个很好的观点。虽然这里不应该有问题:每个返回的行只包含一个包名,但包名不太可能包含任何可能导致问题的字符(空格、glob等),我们对保留可能的空行不感兴趣。此外,我只转换了给定的别名,而没有对调用的命令进行任何修改。与别名相关的一个建议是,如果代码不能放在一行中,那么它可能应该是一个函数,或者至少如果它有这么多管道,那么它就应该是一个函数。我会指出一个。诚然,zsh消除了POSIX中的一些错误决定,但人们在zsh中学习的习惯往往会在其他地方产生。@charlesduff是的,这是一个很好的观点。虽然这里不应该有问题:每个返回的行只包含一个包名,但包名不太可能包含任何可能导致问题的字符(空格、glob等),我们对保留可能的空行不感兴趣。此外,我只转换了给定的别名,而没有对调用的命令进行任何修改。与别名相关的一个建议是,如果代码不能放在一行中,那么它可能应该是一个函数,或者至少如果它有这么多管道,那么它应该是一个函数。