从命令行中,这将在我的phpstorm应用程序中打开两个文件:
git diff --name-only final-migration | xargs pstorm
当我在我的 ~/.bash_profile 中创建别名时:
alias ropen="git diff --name-only $1 | xargs pstorm"
并从与成功命令相同的目录中调用它:
ropen final-migration
什么也没发生..我尝试更改别名,使其回显而不是按预期工作的xargs pstorm
。似乎xargs
在别名中使用时问题出在哪里。我不确定我错过了什么。
第一个问题
别名不适用于$1
等参数。别名使用参数的唯一方法是将它们放在末尾。但是,即使$1
适用于别名,您的定义也不起作用,因为定义时"$1"
会扩展。
您可以使用echo "$1"
打印"$1"
的值。对我来说,它是空的。所以别名...
alias ropen="git diff --name-only $1 | xargs pstorm"
。相当于...
alias ropen="git diff --name-only | xargs pstorm"
要按预期使用$1
,请编写一个函数:
ropen() { git diff --name-only "$1" | xargs pstorm; }
可能的第二个问题
如果打印的路径包含空格,xargs
将修改参数。 假设git diff --names-only
将打印路径a b/c
和x/y z
,然后xargs
将构造命令pstorm "a" "b/c" "x/y" "z"
。这些文件都不存在。
要允许空格,请使用xargs -d 'n' pstorm
,这将构造正确的命令pstorm "a b/c" "x/y z"
。
问题出在OSX提供的xargs版本上。通过使用GNU版本,@socowi关于使用函数的建议非常有效。
为了安装xargs的gnu版本,我按照W所说的做了@Benjamin并使用自制软件来安装findutils。然后,我按照将 findutils 安装到我的 ~/.bash_profile 的建议添加了路径。