我正在创建一些脚本。我将省略cron,文件更改日志等。
脚本中出现问题的部分如下:
#! /bin/bash
ls>./directoryContents.txt
如果您运行此脚本,您会发现directoryContents.txt是ls列出的文件之一。
为什么在运行ls命令之前创建了文件directoryContents.txt?
有没有一种简单的方法来解决这个问题?
答案 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}}
这也适用于多个电话。