我有一个基本的bash脚本,我想用它来创建文件中的目录列表。问题是,当我在终端上键入以下命令时,它工作正常,但在函数内部使用时它不会
function Create_file_dirs()
{
ls | grep / > dirs.txt
cat dirs.txt #used for debugging
}
这个函数在脚本中,我通过调用脚本来运行它。 ./script.sh
`
命令
ls | grep / > dirs.txt
在终端窗口上工作得很好,并逐行生成一个文件列表目录,但在函数内部使用时没有做任何事情,我无法弄清楚原因。感谢
答案 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
}`
希望有所帮助。