将脚本的输出重定向到文件中?

将脚本的输出重定向到文件中?

我希望用户能够命名要创建的文件,然后将脚本的输出重定向到该文件。该脚本将创建一个长目录列表并计算该目录中的文件数量。这是我到目前为止所拥有的:

echo -n "Please enter the name of a file to be created: "

read FILENAME

touch FILENAME

ls -l exampledir

echo

ls -l exampledir | wc -l

我可能没有正确使用 read,我不太确定。

编辑

我已经弄清楚了大部分内容,这是新代码:

echo -n "Please enter the name of a file to be created: "

read FILENAME

ls -l Assign_7 > FILENAME

echo >> FILENAME

ls -l Assign_7 | wc -l >> FILENAME

我唯一不明白的是如何将文件命名为用户输入的名称。它里面有正确的东西,但现在该文件总是被称为 FILENAME

第二次编辑

弄清楚了。只需要在每个文件名前添加 $

答案1

非常简单:

#/bin/bash
echo -n "Please enter the name of a file to be created: "

read FILENAME

ls -l Assign_7 > $FILENAME
echo >> $FILENAME
ls -l Assign_7 | wc -l >> $FILENAME

这称为Parameter Expansion,请参阅man bash以获得完整说明。

此外,还有一种更短的形式,可以稍微简化脚本,并使bash输出文件只打开一次:

#/bin/bash
echo -n "Please enter the name of a file to be created: "

read FILENAME

exec > $FILENAME
ls -l Assign_7
echo ""
ls -l Assign_7 | wc -l

后一种形式通过执行命令将当前 shell 重定向stdout到文件exec > $FILENAME,因此 shell 执行的所有后续命令的输出也定向到该文件。

相关内容