2017-07-31 640 views
0

我有一些shell進程,我需要通過特定行的字符串來捕獲它附帶的錯誤。所以,我這樣做:如何寫字符串輸出shell到文件

OUTPUT="$(npm run generate_post)" 
echo ${OUTPUT} | grep "_currentUrl" * > error.log 

但我沒有任何結果,任何人都可以幫忙嗎?

+0

爲什麼在從管道讀取輸入的同時在'grep'之後有'*'?它應該是'echo「$ {OUTPUT}」| grep「_currentUrl」> error.log'或者只是'npm run generate_post | grep「_currentUrl」> error.log' – anubhava

回答

1

首先,你的聲明沒有任何意義:

echo ${OUTPUT} | grep "_currentUrl" * 

星號擴展到文件在工作目錄,和grep是有搜索模式,忽略從標準輸入什麼來。我不知道你打算用*

然後,你沒有指定你以後是否需要完整的npm輸出。假設你不這樣做,你可以寫

npm run generate_post | grep _currentUrl 

當然,這也許是明智的遵循三聯建議捕捉標準錯誤太多,但是這是一個不同的故事。

如果您確實需要npm的全部輸出,請考慮將其放入文件而不是變量 - 當然這取決於您以後如何使用它,所以這只是以下幾種選擇之一:

npm run generate_post | tee npm_output.txt | grep _currentUrl 
+0

嘿,它工作正常,但我怎麼能打印包含這個短語「_currentUrl」的行,現在我有來自npm的所有數據... THX – Lukas

+0

??? ?grep命令確保只有STDOUT行包含字符串_currentUrl。如果您看到其他信息,這很可能不是STDOUT,而是STDERR,正如在此線程中反覆指出的那樣。 – user1934428

1

我猜你的npm run generate_post在STDERR上輸出錯誤,但是你捕獲了STDOUT。試試這個:

OUTPUT="$(npm run generate_post 2>&1)" 
echo ${OUTPUT} | grep "_currentUrl" * > error.log 

注意上面將捕獲 STDERR和STDOUT。更多的信息在this answer

+0

這是我在我的error.log文件=>'generate_post.sh :echo $ {OUTPUT} | grep「_currentUrl」*> error.log' :( – Lukas