bash script stdout在运行

时间:2018-05-04 23:23:16

标签: bash stdout

我正在创建一些脚本。我将省略cron,文件更改日志等。

脚本中出现问题的部分如下:

#! /bin/bash ls>./directoryContents.txt

如果您运行此脚本,您会发现directoryContents.txt是ls列出的文件之一。

为什么在运行ls命令之前创建了文件directoryContents.txt?

有没有一种简单的方法来解决这个问题?

2 个答案:

答案 0 :(得分:5)

使用command > file时,shell会在运行命令之前创建,截断并打开文件。

避免列出此文件的一种简单方法是在其他位置创建它,然后将其移动到目录中:

ls > /tmp/directoryContents.txt && mv /tmp/directoryContents.txt directoryContents.txt 

当然这只会工作一次。

最好在Bash中使用扩展的glob来匹配除文件之外的所有内容:

shopt -s extglob
printf '%s\n' !(directoryContents.txt) > directoryContents.txt

答案 1 :(得分:1)

  

有没有一种简单的方法来解决这个问题?

要解决这个问题,只需要把它弄出来。

{{1}}

这也适用于多个电话。