使用bash在git存储库中输出文件
我尝试使用bash在git存储库中以以下方式输出文件:使用bash在git存储库中输出文件,git,bash,Git,Bash,我尝试使用bash在git存储库中以以下方式输出文件: #!/bin/bash files=$(git ls-files -z) while IFS='' read -r -d '' file do echo "filename: $file" done < <(printf '%s' "$files") #/bin/bash files=$(git ls files-z) 而IFS=''读取-r-d''文件 做 echo“文件名:$file” 只需在bash中列出
#!/bin/bash
files=$(git ls-files -z)
while IFS='' read -r -d '' file
do
echo "filename: $file"
done < <(printf '%s' "$files")
#/bin/bash
files=$(git ls files-z)
而IFS=''读取-r-d''文件
做
echo“文件名:$file”
只需在bash中列出文件名
#!/bin/bash
files=$(git ls-files)
for file in ${files} ;
do
echo $file ;
done;
问题不在于读取
,而在于对文件的初始分配
:
bash$ git ls-files -z | wc -c
301
bash$ files=$(git ls-files -z); echo ${#files}
275
你认为26的差异从何而来?让我们尝试在一个普通的gitls文件中计算换行符(no-z
):
最后:
bash$ git ls-files -z | while IFS= read -r -d '' file; do echo "file: $file"; done
file: .gitignore
file: COPYRIGHT
[snipped]
这一切都归结为一个事实,即bash在内部无法将asciinul字节存储在变量中。它只是在var=$(…)
的情况下将它们完全剥离。那么您的问题是输出没有写入文件?另外,我不得不猜测,只要你使用printf,你就是在胡闹??请发布整个脚本,以便我们可以看到整个格式。@hedgehog抱歉:没有输出,我正在使用bash(已编辑的问题)也许我错了,但我真的没有看到您在任何时候在任何文件中写入任何输出。。。。。也许这是我不知道的,但是当我想在文件上输出一些东西时,我使用这种格式:tmp/someFile。txt@hedgehog我用我的调试输出前缀“>>>>>”(已编辑的问题)的风格把您弄糊涂了。我只想将我的repo中的所有文件打印到stdout中。但我没有得到任何输出。@n问题似乎与此链接中的信息相关没有错误:)此方法限制了文件名中可以使用的字符,因为它们可以解释为单词分隔符。这就是为什么我尝试使用-z
选项git ls files
和bashread
内置的组合。谢谢您的回答!从$(…)开始是命令替换,shell从命令替换的输出中删除尾随的换行符。可能是这样。@fedorqui:不,shell将用空格替换中间(分隔符)换行符,但这将保留字符数,减去最后一个换行符。实际上,bash$files=$(gitls文件);echo${#files}
打印300
。
bash$ git ls-files -z | while IFS= read -r -d '' file; do echo "file: $file"; done
file: .gitignore
file: COPYRIGHT
[snipped]