我试图编写这个命令在屏幕上运行,另外两个将使用cat来读取文件,然后将其pipe道到awk过滤。 这是命令;
screen -d -m /bin/cat /var/www/html/filter/unfiltered.txt | awk '{print $1}' > /var/www/html/filter/first.txt
如果我检查分离的屏幕,我看到它过滤列表,当它完成时,文件first.txt创build,但空。 我在屏幕上看到了一些关于使用-L的输出日志,但是我希望输出到非过滤列表所在的文件夹中,并且调用first.txt ,我不知道为什么它会成功运行,但是输出文件每次都是空的。 如果我运行它没有screen -d -m创build的文件不是空的。 我想我用屏幕命令丢失了一些东西。 我刚开始使用屏幕。 我不知道什么时候发布。
这不起作用的原因是shell将命令分成两部分:
screen -d -m /bin/cat /var/www/html/filter/unfiltered.txt awk '{print $1}' >/var/www/html/filter/first.txt
screen在另一个pty screen运行cat 。 那么在stdout上没有输出到awkpipe道。
如果您希望pipe道在屏幕下运行,则需要将其与另一个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 )。