我知道我可以在命令行中连续运行两个命令:
git add -u && git commit --amend --no-edit
我也有使用设置别名doskey
doskey a=git add $*
但是如何才能将多个命令组合到一个doskey
别名中呢?
doskey amend=git add -u && git commit --amend --no-edit
通过将设置doskey
为第一个命令doskey amend=git add -u
然后git commit --amend --no-edit
在运行时立即执行而不是将复合命令保存到doskey
别名,此操作会失败。
我也尝试引用整件事:
doskey amend="git add -u && git commit --amend --no-edit"
但这也失败了,因为它对引文进行了逐字解释:
'“git add -u && git commit --amend --no-edit”' 不被识别为内部或外部命令、可操作程序或批处理文件。
答案1
问题是&&
表示命令的结束doskey
,而第二条git
命令在其后内联执行。
我尝试过其他语法组合,但是除了以下情况之外,没有一个允许在扩展&&
后进行解析doskey
:
doskey amend=cmd /c "git add -u && git commit --amend --no-edit"
这会启动一个新的 shell,效率很低。更好的解决方案可能是将两个命令放入批处理文件(例如amend.cmd
)并将宏分配给以下内容:
doskey amend=amend.cmd
答案2
这是谷歌的第一个结果,但我发现其他类似的问题有很好的答案。
1- 转义 & 符号doskey foo=bar ^& baz
2-使用 doskey 自己的命令分隔符doskey foo=bar $T baz
这更干净,并且不会打开额外的命令窗口。
答案3
您可以在单个 DOSKEY 中链接命令,如 Ali 所提到的那样使用$T
或^&
分隔符,但是您无法在终端中链接 doskey 命令。以下是一个例子
这有效
doskey ls=dir $T echo YAY A FOLDER
查看输出:
C:\tmp>ls
Volume in drive C has no label.
Volume Serial Number is ABCD-1234
Directory of C:\tmp
23/07/2020 18:02 <DIR> .
23/07/2020 18:02 <DIR> ..
C:\tmp>YAY A FOLDER
C:\tmp>
这不
C:\tmp>ls && echo YAY ANOTHER ECHO!!
Volume in drive C has no label.
Volume Serial Number is ABCD-1234
Directory of C:\tmp
23/07/2020 18:02 <DIR> .
23/07/2020 18:02 <DIR> ..
C:\tmp>YAY A FOLDER
C:\tmp>
嘘没有YAY ANOTHER ECHO!!
更好的解决方案
使用文件夹中的批处理文件并设置 PATH
- 放入
dir && echo YAY A FOLDER
文件C:\batch\ls.bat
- 放
path=%PATH%;C:\batch
- 跑步
ls && echo YAY ANOTHER ECHO!!
- 欣赏可爱的输出
_
C:\tmp>ls && echo YAY ANOTHER ECHO!!
Volume in drive C has no label.
Volume Serial Number is ABCD-1234
Directory of C:\tmp
23/07/2020 18:02 <DIR> .
23/07/2020 18:02 <DIR> ..
YAY A FOLDER
YAY ANOTHER ECHO!!
C:\tmp>
附言- 对于上述第 2 步,最好永久设置 PATH 环境变量。
答案4
使用 ^ 转义 & 字符,如下所示:
DOSKEY amend=git add -u ^&^& git commit --amend --no-edit