Bash 猛击。将grep的输出重定向到文件
我有一个基本的bash脚本,我想用它在文件中创建目录列表。问题是,当我在终端上键入以下命令时,它可以正常工作,但在函数中使用时,它不能正常工作Bash 猛击。将grep的输出重定向到文件,bash,shell,directory,Bash,Shell,Directory,我有一个基本的bash脚本,我想用它在文件中创建目录列表。问题是,当我在终端上键入以下命令时,它可以正常工作,但在函数中使用时,它不能正常工作 function Create_file_dirs() { ls | grep / > dirs.txt cat dirs.txt #used for debugging } 这个函数在脚本中,我通过调用脚本来运行它/script.sh ` 命令 ls | grep/>dirs.txt 在终端窗口上工作得很好,并生成一个逐行列出
function Create_file_dirs()
{
ls | grep / > dirs.txt
cat dirs.txt #used for debugging
}
这个函数在脚本中,我通过调用脚本来运行它/script.sh
`
命令
ls | grep/>dirs.txt
在终端窗口上工作得很好,并生成一个逐行列出目录的文件,但在函数中使用时却没有任何作用,我不知道为什么。谢谢
ls
没有选项不会产生斜杠,所以grep找不到任何东西。您可以在命令行上轻松地复制它
comand ls|grep /
我感谢威廉·珀塞尔的回答,也感谢所有做出贡献的人 答案来自威廉·珀塞尔(William Pursell)的评论。 工作功能是:
create_file_dirs()
{
ls -F | grep / >./dirs.txt
cat dirs.txt
}
问题是,当我在终端上运行ls命令时,我可以在目录名后看到一个斜杠/并且在终端上运行该命令实际上产生了所需的结果
ls | grep / > ./dirs.txt
似乎通过脚本运行ls不会在目录名后产生斜杠/这就是为什么我必须添加它们-F选项来解决这个问题
我测试它的方法是在脚本中使用这个简单的函数并运行脚本。结果没有斜线
test_dirs(){
ls | cat
}
如何调用该函数?在交互式提示中,
ls
可能是ls-F
的别名。试着只使用ls-F|grep…
作为备用--Create_file_dirs(){set-*/{[-d$1]]&&printf'%q\n'$@;}>dirs.txt;}
是一种完全不需要ls
(或shell本身外部的其他命令)的编写方法,并将以读者清楚的方式在文件名中写入隐藏字符。(函数
关键字只会降低代码的可移植性;不要使用它)。@CharlesDuffy聪明的一句话,但对许多用户来说可能有点难以理解?@Fred耸耸肩。这只是一行,因为我把它写进了评论栏。更换如果你觉得太简洁的话,用换行符编码ls
适用于除纯人类消费清单之外的任何用例——如果您想要使用不太模糊的行为,并且愿意承担启动外壳外部流程的性能成本,那么更好的选择是find
。