既然建立了以下命令的别名?

时间:2018-01-24 20:44:34

标签: bash git github git-bash

您好我正在尝试使用gitbash在以下别名中建立,但不能:

alias dirpwd='$(`pwd | xargs dirname | xargs basename -a`)' && echo -e $dirpwd;

输出结果为:

bash: c: command not found

为什么?

谢谢大家!!

2 个答案:

答案 0 :(得分:4)

会发生什么:

反引号和$()以相同的方式工作。它们内部的命令被执行,结果输出被视为直接键入它。

假设你在/top/c/bottom。 反引号内的pwd | xargs dirname | xargs basename -a部分输出c。 Bash用其输出替换反引号部分,从而生成命令$(c)。 现在bash尝试在$(...)内执行命令,但c不是命令,因此错误bash: c: command not found

首次修复:

我想你只想写

alias dirpwd="pwd | xargs dirname | xargs basename -a"

<强>错误:

有一个隐藏的错误。 xargs在空格处分割,可以将多个参数传递给dirnamebasename

示例:假设您在/top/a b c/xarg创建以下命令并输出

dirname "/top/a" "b" "c/"    
/top
.
.

第二次修复:

使用$()代替xargs

alias dirpwd='basename "$(dirname "$PWD")"'

答案 1 :(得分:0)

尝试解决方案:

alias dirpwd="pwd | xargs dirname | xargs basename -a"