我正在尝试从我的仓库中检出所有修改过的文件:
git status | grep modified | awk '{split($0,a,":"); print a[2]}'
给我文件名,即git status
返回的位置:
modified: a.txt
modified: b.txt
awk返回(注意空白):
a.txt
b.txt
我尝试将print
替换为git checkout
:
git status | grep modified | awk '{split($0,a,":"); git checkout a[2]}'
但这没用。
然后我认为它可能与空白相连,所以我用
将其删除了git status | grep modified | awk '{split($0,a,":"); gsub(" ","",a[2]); git checkout a[2]}'
哪个,当我与print
而不是git checkout
一起使用时,我看到的是按我的意愿打印没有任何空格的文件名。
但是,这也行不通,并且没有任何警告。我认为这可能是由于 awk 不调用命令而只是编辑文本,所以我尝试在之前添加evil
,但无济于事...
我该如何做?
答案 0 :(得分:2)
能否请您尝试一次(我从代码中删除了grep
部分,因为awk
本身可以搜索文本)。我无法测试它,因为我的系统中没有git:)
git status | awk '/modified/{split($0,a,":"); print "git checkout " a[2] > ("script.ksh")} END{close("script.ksh");system("chmod 755 script.ksh;./script.ksh")}'
说明: :在awk
代码中,只需创建一个脚本文件(仅适用于其中仅包含字符串modified
的那些行。脚本文件名称将为{.1sh}的script.ksh),然后通过提供适当的执行权限来执行它。我们可以看到awk
使用了man awk
的{{1}}函数,这有助于system
在程序中运行BASH级别的命令。还应该完成awk
的一点。为了避免由于awk
程序仍在运行而使OP出现close("script.ksh")
之类的错误,因此将在后端打开文件,然后关闭文件,然后将其用于运行。
编辑: :以上解决方案使用脚本文件来运行所有git语句,以防万一您不创建文件就运行它们,然后尝试执行以下操作。
file is busy....etc