在 SCREEN 中运行 CAT,无输出到文件

在 SCREEN 中运行 CAT,无输出到文件

我正在尝试编写此命令,使其在屏幕上运行,同时使用其他 2 个命令cat来读取文件,然后将其导入awk进行过滤。命令如下;

screen -d -m /bin/cat /var/www/html/filter/unfiltered.txt | awk '{print $1}' > /var/www/html/filter/first.txt

如果我检查分离的屏幕,我会看到它正在过滤列表,当它完成时,文件first.txt已创建但为空。我看到了一些关于-L在屏幕中使用输出日志的内容,但我希望输出进入未过滤列表所在的同一文件夹并调用first.txt,我无法弄清楚为什么它会成功运行,但输出文件每次都是空的。如果我在没有screen -d -m创建文件的情况下运行它,则文件不为空。我想我遗漏了屏幕命令的某些内容。我刚开始使用屏幕。我不确定什么时候发布。

答案1

这不起作用的原因是 shell 将命令分成两部分,如下所示:

screen -d -m /bin/cat /var/www/html/filter/unfiltered.txt

awk '{print $1}' >/var/www/html/filter/first.txt

screen在单独的 pty 上运行。cat然后没有输出标准输出用管道输送到awk

如果您想要管道在屏幕下运行,则需要将其与 shell 的另一个实例分组:

screen -d -m bash -c 'cat /var/www/html/filter/unfiltered.txt | awk "{print $1}" >/var/www/html/filter/first.txt'

完成此操作后,应该清楚这是不必要的使用cat,实际上命令可以简化如下:

screen -d -m bash -c 'awk "{print $1}" </var/www/html/filter/unfiltered.txt >/var/www/html/filter/first.txt'

注意,我已将内部引号从单引号改为双引号。这是因为我使用单引号来保护整个命令(尤其是防止$1早期评估)。

相关内容