【发布时间】:2017-01-19 22:12:22
【问题描述】:
我有一个基本的 bash 脚本,我想用它在文件中创建目录列表。问题是,当我在终端上键入以下命令时,它可以正常工作,但在函数中使用时却不行
function Create_file_dirs()
{
ls | grep / > dirs.txt
cat dirs.txt #used for debugging
}
这个函数在一个脚本中,我通过调用脚本来运行它。 ./script.sh
`
命令
ls | grep / > dirs.txt
在终端窗口上工作得很好,并逐行生成一个列出目录的文件,但是在函数内部使用时没有做任何事情,我不知道为什么。谢谢
【问题讨论】:
-
你是怎么调用函数的?
-
在交互式提示中,
ls可能是ls -F的别名。尝试使用ls -F | grep ... -
顺便说一句——
Create_file_dirs() { set -- */; { [[ -d $1 ]] && printf '%q\n' "$@"; } >dirs.txt; }是一种不需要ls(或shell 本身外部的其他命令)的编写方式,并且会在你的文件名以读者清楚的方式。 (function关键字只会降低代码的可移植性;不要使用它)。 -
@CharlesDuffy 聪明的单行,但对许多用户来说可能有点难以破译?
-
@Fred,耸耸肩。这只是一个单行,因为我正在将它写入评论字段。如果您认为
;s 太简洁,请将其替换为换行符。ls是 objectively a bad tool 对于任何用例,而不是纯粹人类消费的列表 - 如果您想要使用不太模糊的行为并且愿意消耗在 shell 外部启动进程的性能成本,更好的选择将是find。