Pushd 无法在 git 别名中正确扩展

Pushd 无法在 git 别名中正确扩展

我正在编写一个使用该命令的 git 别名pushd。但是,该命令似乎没有正确扩展。


操作系统

编辑 我在 Windows 10 上的 WSL 上运行 ubuntu:

$ uname -a
Linux PowerSpecX251 4.4.0-19041-Microsoft #1237-Microsoft Sat Sep 11 14:32:00 PST 2021 x86_64 x86_64 x86_64 GNU/Linux

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.7 LTS
Release:        16.04
Codename:       xenial

疑问/问题

我使用这种语法为 git 别名创建复杂的脚本,它可以处理子 shell 和多个命令:

diff-stat = ! "f() { git diff --stat=$(tput cols) $1 ; }; f"
scrub = ! "f() { git reset --hard; git clean -f -f -d; }; f"

但是,当我使用其中的命令创建别名时出现错误pushd- 目录的参数似乎没有正确传递:

$ grep pushdtest .gitalias
pushdtest = ! "f() { pushd /home; popd; }; f"

$ git pushdtest
 f() { pushd /home; popd; }; f: 1:  f() { pushd /home; popd; }; f: pushd: not found
 f() { pushd /home; popd; }; f: 1:  f() { pushd /home; popd; }; f: popd: not found
fatal: While expanding alias 'pushdtest': ' f() { pushd /home; popd; }; f': No such file or directory

我尝试添加引号,但没有成功:

$ git pushdtestquotes
 f() { pushd '/home'; popd; }; f: 1:  f() { pushd '/home'; popd; }; f: pushd: not found
 f() { pushd '/home'; popd; }; f: 1:  f() { pushd '/home'; popd; }; f: popd: not found
fatal: While expanding alias 'pushdtestquotes': ' f() { pushd '/home'; popd; }; f': No such file or directory

如何编写pushd正确使用该命令的 git 别名?

答案1

这可能会失败,因为您/bin/sh不支持pushd并且popd例如这是破折号)。

您可以通过显式指定要使用的 shell 来确保pushd和可以在您的别名中使用:popd

pushdtest = !bash -c "'f() { pushd /home; popd; }; f'"

相关内容