将bash脚本的结果传递给文本文件

时间:2016-10-11 12:42:34

标签: linux bash

我遇到了将以下脚本的结果提取到文件的问题。当我运行以下脚本时,没有任何内容写入filecheck_output文件。

#!/bin/bash

cd /var/www/html/images/
results="$(find projects -name "*.*" | sort -n)"

echo "${results}" > filecheck_output

脚本的名称是filecheck。当我从脚本末尾删除> filecheck_output部分并从命令行运行./filecheck > filecheck_output时,脚本会运行并将结果输出到filecheck_output文件中而不会出现任何问题。

为什么在从命令提示符运行命令而不是在脚本中运行命令时,只会重定向输出?

2 个答案:

答案 0 :(得分:1)

您的术语已关闭。您希望输出重定向到文件。 pipe 某事意味着从一个命令获取输出并将其提供给另一个命令,就像你在find | sort中所做的那样。

在临时变量中捕获结果简直就是浪费,所以你真的只是在寻找

find projects -name "*.*" | sort -n >filecheck_output

该脚本之前执行cd,因此显然会在该目录中创建输出文件。如果您想避免这种情况,请不要cd,或在子shell中执行cd

( cd somewhere; find projects ) | sort -n >filecheck_output

find somewhere/projects | sort -n >filecheck_output

在后一种情况下,find的输出将在每个生成结果的路径中包含somewhere。您可以使用sed进行后处理以删除它,就像我在此处显示的那样,尽管这看起来比子shell解决方案更脆弱。

find somewhere/projects | sed 's%^somewhere/%%' | sort -n

不在脚本中进行重定向似乎是使其可重用的最佳方法;然后你可以在每次运行时选择不同的输出文件,如果你愿意的话,这样就可以使用它,例如在一组目录的while循环中,或者其他任何内容。

答案 1 :(得分:0)

与其他人提到的一样,您需要将filecheck_ouput的完整路径或相对路径放入脚本中。

#!/bin/bash

cd /var/www/html/images/
results="$(find projects -name "*.*" | sort -n)"

echo "${results}" > /home/fedorqui/filecheck_output