Bash 猛击。将grep的输出重定向到文件

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 在终端窗口上工作得很好,并生成一个逐行列出

我有一个基本的bash脚本,我想用它在文件中创建目录列表。问题是,当我在终端上键入以下命令时,它可以正常工作,但在函数中使用时,它不能正常工作

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