
我正在嘗試編寫此命令,使其與其他兩個命令一起在螢幕上運行,這些命令將用於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
創建的文件不為空的情況下運行它。我想我在 screen 命令中遺漏了一些東西。我剛開始使用螢幕。我不確定什麼時候發文。
答案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
是早期評估)。