Shell-Script

pushd 在 git 別名中沒有正確擴展

  • August 17, 2022

我正在編寫一個使用該pushd命令的 git 別名。但是,該命令似乎沒有正確擴展。


作業系統

編輯 我在 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 別名?

這可能是失敗的,因為你/bin/sh不支持pushdpopd例如它是破折號)。

您可以通過明確指定要使用的 shell 來確保pushdpopd在您的別名中可用:

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

引用自:https://unix.stackexchange.com/questions/713928