.zshrc文件中的别名错误

时间:2017-07-23 16:04:04

标签: shell zsh

我在.zshrc的{​​{1}}文件中遇到了别名的问题。 这是别名:

macOS

当我打电话给它时,shell会回答我:

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';

我找不到问题的根源。

2 个答案:

答案 0 :(得分:1)

问题的症结在于您使用单引号来定义别名,但您还尝试在其中使用单引号。这会打破定义alias foo=string时需要查看的连续字符串zsh。您可以在单个带引号的字符串中使用单引号,方法是结束它,转义引号,然后重新开始。例如:

alias foo='command '\''$1'\'' another-arg'

或者在最后加入一个引号,只需结束引用的字符串并转义一个引号:

echo 'this is a single quote: '\'

答案 1 :(得分:1)

piojo wrote一样,问题是单引号内不能使用单引号。

在这种情况下,我建议创建函数而不是别名,而不是解决引用。

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
}

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