读取命令不适用于 Git 别名
Read command not working with Git aliases
sp = "!echo name && read name"
我已将其添加到我的别名列表中。当我 运行 它按预期打印“名称”时,我可以输入一些内容进行阅读;但在回车和尝试 echo $name
时,什么也没有。
当我直接 运行 终端中的命令并且我输入的任何内容都存储在 $name
中时,它工作正常。
我还有另一个问题,这是第一个问题,我试图尽可能地简化它以解决上述问题,但这是原始问题:
sp = "!read branch\"?Branch Name: \""
每当我通过 git sp
运行 时,我都会收到错误消息
read branch"?Branch Name:": line 0: read: `branch?Branch Name:': not a valid identifier
将错误的第一位(即命令文本)复制粘贴到终端中,然后直接 运行 使其完美运行,因此它不可能是某处的某种无效隐藏字符,但我不能确定 git 是如何替换东西的。
我在 macos monterey 上使用 terminal.app 和 zsh。谢谢。
[有了最初想要的别名,你得到:]
read branch"?Branch Name:": line 0: read: `branch?Branch Name:': not a valid identifier
Git 运行 将别名输入 /bin/sh
。该:
read var?"prompt string"
语法是内置 zsh read
所特有的(参见,例如,https://zsh.sourceforge.io/Doc/Release/Shell-Builtin-Commands.html);在 /bin/sh 中,这是试图读入名为 var?prompt string
的变量,由于嵌入了 question-mark 和 space.
,这不是有效的变量名称
要直接使用 zsh 脚本,请使脚本可执行,将其放在您的 $PATH
中,并将其命名为 git-sp
。那么:
git sp
将 运行 您的 git-sp
脚本。由于您的脚本将以 #! /bin/zsh
开头,您将获得 zsh 而不是普通的 sh,并且您将可以访问所需的 read
built-in。此外,您不必处理将整个命令作为单行别名嵌入所产生的所有复杂情况:
When I run [a simplified version,] "name" is printed as expected and I can input something into read; but on carriage returning and trying echo $name
, nothing's there.
每个命令都是 运行 通过 单独的 shell 调用。读入变量的值一直存在,直到 shell 调用退出(或者您在同一调用中覆盖或取消设置它们);然后他们蒸发了。要更永久地存储一些东西,请使用文件系统。考虑将设置存储在 git config
数据库中(--global
和 per-repository):您可以在此处自行命名。您冒着 运行 未来某些 Git 版本(git version 3.1415
?)可能窃取您的名字并将其用于自己目的的风险,但这取决于您选择的名字space ,你可以让这不太可能。例如:
git config --global torek.user.setting1 value1
git config --global torek.user.setting2 value2
如果 future-Git 决定使用 torek.*
设置,我只会在这里遇到麻烦。 (Perhaps it's being worked on by a Slovenian on a Tuesday.)
sp = "!echo name && read name"
我已将其添加到我的别名列表中。当我 运行 它按预期打印“名称”时,我可以输入一些内容进行阅读;但在回车和尝试 echo $name
时,什么也没有。
当我直接 运行 终端中的命令并且我输入的任何内容都存储在 $name
中时,它工作正常。
我还有另一个问题,这是第一个问题,我试图尽可能地简化它以解决上述问题,但这是原始问题:
sp = "!read branch\"?Branch Name: \""
每当我通过 git sp
运行 时,我都会收到错误消息
read branch"?Branch Name:": line 0: read: `branch?Branch Name:': not a valid identifier
将错误的第一位(即命令文本)复制粘贴到终端中,然后直接 运行 使其完美运行,因此它不可能是某处的某种无效隐藏字符,但我不能确定 git 是如何替换东西的。
我在 macos monterey 上使用 terminal.app 和 zsh。谢谢。
[有了最初想要的别名,你得到:]
read branch"?Branch Name:": line 0: read: `branch?Branch Name:': not a valid identifier
Git 运行 将别名输入 /bin/sh
。该:
read var?"prompt string"
语法是内置 zsh read
所特有的(参见,例如,https://zsh.sourceforge.io/Doc/Release/Shell-Builtin-Commands.html);在 /bin/sh 中,这是试图读入名为 var?prompt string
的变量,由于嵌入了 question-mark 和 space.
要直接使用 zsh 脚本,请使脚本可执行,将其放在您的 $PATH
中,并将其命名为 git-sp
。那么:
git sp
将 运行 您的 git-sp
脚本。由于您的脚本将以 #! /bin/zsh
开头,您将获得 zsh 而不是普通的 sh,并且您将可以访问所需的 read
built-in。此外,您不必处理将整个命令作为单行别名嵌入所产生的所有复杂情况:
When I run [a simplified version,] "name" is printed as expected and I can input something into read; but on carriage returning and trying
echo $name
, nothing's there.
每个命令都是 运行 通过 单独的 shell 调用。读入变量的值一直存在,直到 shell 调用退出(或者您在同一调用中覆盖或取消设置它们);然后他们蒸发了。要更永久地存储一些东西,请使用文件系统。考虑将设置存储在 git config
数据库中(--global
和 per-repository):您可以在此处自行命名。您冒着 运行 未来某些 Git 版本(git version 3.1415
?)可能窃取您的名字并将其用于自己目的的风险,但这取决于您选择的名字space ,你可以让这不太可能。例如:
git config --global torek.user.setting1 value1
git config --global torek.user.setting2 value2
如果 future-Git 决定使用 torek.*
设置,我只会在这里遇到麻烦。 (Perhaps it's being worked on by a Slovenian on a Tuesday.)