在bash中通过管道传递参数

时间:2012-01-11 18:51:19

标签: git bash terminal

我正在尝试通过终端中的管道传递参数以获取git命令,并且,按照惯例,我不知道我在做什么。

目前:git rm --cached folder/path | rm -rf folder/path | git commit -m '...'

如果可能的话,我不想在第二个命令中重复使用文件夹路径,但我不确定如何从第一个命令中获取folder/path

甚至可能,还是我在错误的树上狂奔?

4 个答案:

答案 0 :(得分:0)

你不需要做管道。

rm folder/file
git rm !$
git commit -m "your message"

在bash中学习bang(!)运算符非常值得。再次指定长路径并不是最好的。

对于我的大多数工作流程,我都可以解决这个问题:

rm path/to/unwanted/file
git add -A # stages ALL changes in the work tree
git commit -m "my message"

如果我正在修复之前错误添加了我不想要的文件的提交,可以通过将上面代码片段中的最后一次提交更改为

来修改该提交。
git commit --amend -C HEAD

这将重用当前提交的消息。

您可能希望包含git状态的输出以及您要执行的操作。

答案 1 :(得分:0)

我认为这应该有效:

param=/folder/path; git rm --cached $param | rm -rf $param | git commit -m '...'

编辑:@pholser解决方案通过使用unset从环境中删除变量,使事情变得更清晰。这也可以在subshell

中运行命令
(param=/folder/path; git rm --cached $param | rm -rf $param | git commit -m '...')

答案 2 :(得分:0)

x=/folder/path && git rm --cached $x | rm -rf $x | git commit -m '...' && unset x

答案 3 :(得分:0)

您无需从索引中删除并单独从文件系统中删除,git rm旨在同时执行这两项操作:

git rm -r folder/path

rmgit commit的管道没有任何意义,因为它们都没有从你正在尝试的表格中读取标准输入。您可以使用;分隔命令。