Split git diff--按换行符显示名称状态
我正在尝试使用git通过以下命令从两次提交中导出已更改文件的列表:Split git diff--按换行符显示名称状态,git,bash,git-bash,Git,Bash,Git Bash,我正在尝试使用git通过以下命令从两次提交中导出已更改文件的列表: read -ra ADDR <<< `git diff --name-only HEAD..HEAD~1 | sed -e "s/ /\\\ /g"` for i in "${ADDR[@]}"; do echo "$i" done 但是,我想使用--name status而不是--name only。原因是我以后可以根据所做的更改(例如M或D)做不同的事情 但这不起作用。我得到以下格式的列表: M
read -ra ADDR <<< `git diff --name-only HEAD..HEAD~1 | sed -e "s/ /\\\ /g"`
for i in "${ADDR[@]}"; do
echo "$i"
done
但是,我想使用--name status
而不是--name only
。原因是我以后可以根据所做的更改(例如M或D)做不同的事情
但这不起作用。我得到以下格式的列表:
M
file1.txt
M
file2.txt
M
file3.txt
我尝试将IFS
变量更改为$'\n'
(在一行上返回所有内容),$'\t'
(返回第一行,例如M file1.txt
)和'
(与\t
)但未成功
while read STATUS ADDR
do
echo "$ADDR ($STATUS)"
done < <(git diff --name-status HEAD..HEAD~1)
以下内容由while循环打印:
INSTALL (M)
debian/changelog (M)
src/lib/libnvpair/SConscript (M)
src/lib/libzfscommon/SConscript (M)
src/lib/libzpool/SConscript (M)
src/zfs-fuse/main.c (M)
你能不能加上“/^M$/d'到您的sed脚本中,以删除仅为M的行。祝您好运。当我运行
git diff--name status..
时,我会得到一个文件名列表,状态在第一列中。我不确定您的sed
命令提供了什么。我的bash不是最好的,所以我不能给出一个例子,但我认为你可以通过awk
获得你想要的,它可以让你按位置抓取字段,并输出它们。唉。我花了几次忍者编辑才把它弄对。现在完成:)
M INSTALL
M debian/changelog
M src/lib/libnvpair/SConscript
M src/lib/libzfscommon/SConscript
M src/lib/libzpool/SConscript
M src/zfs-fuse/main.c
INSTALL (M)
debian/changelog (M)
src/lib/libnvpair/SConscript (M)
src/lib/libzfscommon/SConscript (M)
src/lib/libzpool/SConscript (M)
src/zfs-fuse/main.c (M)