带参数的ZSH别名

alb*_*ttx 57 bash shell alias zsh zshrc

我正在尝试为我的简单git add/commit/push创建一个带参数的别名.

我已经看到函数可以用作别名所以我尝试但我没有成功..

在我之前:

alias gitall="git add . ; git commit -m 'update' ; git push"
Run Code Online (Sandbox Code Playgroud)

但我希望能够修改我的提交:

function gitall() {
    "git add ."
    if [$1 != ""]
        "git commit -m $1"
    else
        "git commit -m 'update'"
    fi
    "git push"
}
Run Code Online (Sandbox Code Playgroud)

(我知道这是一个可怕的git练习)

Kev*_*vin 73

你不能用参数*创建一个别名,它必须是一个函数.你的函数很接近,你只需引用某些参数而不是整个命令,并在其中添加空格[].

gitall() {
    git add .
    if [ "$1" != "" ] # or better, if [ -n "$1" ]
    then
        git commit -m "$1"
    else
        git commit -m update
    fi
    git push
}
Run Code Online (Sandbox Code Playgroud)

*:大多数shell不允许在别名中使用参数,我相信csh和衍生物都可以,但是你不应该使用它们.

  • 顺便说一句,如果您使用了git commit -m“ $ {1:-update}”(提供了默认值的参数扩展),那么您根本就不需要`if`语句。 (6认同)

joe*_*lpt 58

如果由于某种原因确实需要使用带参数的别名,可以通过在别名中嵌入函数并立即执行它来破解它:

alias example='f() { echo Your arg was $1. };f'
Run Code Online (Sandbox Code Playgroud)

我看到这种方法在.gitconfig别名中使用了很多.

  • 无需将任何名称添加到全局范围,只需使用匿名函数: `alias example='(){ echo Your arg was $1. ;}'` (12认同)
  • 为什么要做别名呢?只需调用函数`example`即可. (9认同)
  • 如此hacky,但又如此美丽 (4认同)
  • 另外,迟来的,你需要在右大括号之前加一个分号。 (3认同)
  • 这太漂亮了。这样我就可以创建一个别名,将别名添加到 rc 文件中,然后重新加载所述 rc 文件。❤️ alias addalias='f() { echo "alias" $1 >> ~/.zshrc && . ~/.zshrc };f' (2认同)
  • 请注意,这必须用单引号编写(就像在原始示例中一样)。我一开始使用双引号,它破坏了功能。不知道为什么 ́\\_(ツ)_/́ (2认同)
  • @jan 这是设计使然:匿名函数在其词法范围内立即调用。将它们存储在 shell 的查找表中是没有意义的,因为以后无法引用它们。它们在调用后立即被丢弃 (2认同)

Has*_*lah 7

我在.zshrc文件中使用了这个函数:

function gitall() {
    git add .
    if [ "$1" != "" ]
    then
        git commit -m "$1"
    else
        git commit -m update # default commit message is `update`
    fi # closing statement of if-else block
    git push origin HEAD
}
Run Code Online (Sandbox Code Playgroud)

这里git push origin HEAD负责将您当前的分支推送到远程.

从命令提示符运行此命令: gitall "commit message goes here"

如果我们只运行gitall没有任何提交消息,那么提交消息将update如函数所述.

  • 正是我想做的,非常感谢! (2认同)

Alb*_*gni 5

"git add ."之间的其他命令"只是 bash 的字符串,删除"s。

[ -n "$1" ]您可能想在 if 主体中使用它。