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

时间:2017-01-19 22:12:23

标签: bash shell directory

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

function Create_file_dirs()
{ 
    ls | grep / > dirs.txt
    cat dirs.txt #used for debugging
}

这个函数在脚本中,我通过调用脚本来运行它。 ./script.sh

`

命令     ls | grep / > dirs.txt 在终端窗口上工作得很好,并逐行生成一个文件列表目录,但在函数内部使用时没有做任何事情,我无法弄清楚原因。感谢

3 个答案:

答案 0 :(得分:1)

没有选项的

ls不会产生斜杠,所以grep找不到任何东西。您可以通过命令行轻松地重现它,例如

comand ls|grep /

答案 1 :(得分:1)

感谢William Pursell的回答以及所有贡献者。

答案来自William Pursell的评论。 工作职能是:

    create_file_dirs()
{ 
    ls -F | grep / >./dirs.txt
    cat dirs.txt
}

问题是,当我在终端上运行ls命令时,我可以看到一个斜杠/在目录名后面,并且在终端上运行命令实际上产生了所需的结果。

ls | grep / > ./dirs.txt

看起来虽然通过脚本运行ls并不会产生斜杠/目录名称之后,这就是为什么我必须添加-F选项来解决此问题。

我测试它的方式是在脚本中使用这个简单的函数并运行脚本。结果没有斜线。

test_dirs(){
    ls | cat
} 

答案 2 :(得分:-1)

也许你需要给它使用ls和grep的路径。我经常看到shell脚本写在脚本顶部的那些命令是常量的地方。例如:

`TR=/bin/tr
GREP=/usr/bin/grep`

然后使用常量而不是命令本身:

`function Create_file_dirs()
 { 
    $LS | $GREP / > dirs.txt
    cat dirs.txt #used for debugging
 }`

希望有所帮助。