2013-01-04 49 views
1

我想運行一些腳本並grep輸出。例如,運行此工程,並具有所需的輸出線:

$ myScript.sh 

運行,這並不:

$ myScript.sh | grep something 

經過進一步審查,myScript.sh有這個在它:

#!/bin/sh  
... 
$JAVA_HOME/bin/java the.real.script.is.here ${1+"[email protected]"} 

我假設「| grep something」被吸入到$ @列表中。關於如何輕鬆輸出輸出的想法?謝謝!

編輯:感謝大家有關變量如何解析的信息。這肯定是其他問題。也許這是我所喜歡的。在我的輸出中,我正在尋找帶有「/SE_2012.old」的行。我用「| grep old」再次運行腳本,並得到no輸出。我用「| grep SE」運行它,並得到了一個結果。我用「老」再次運行它,看看我是否瘋了,它給我一個結果DID

+2

我不認爲你已經提供了足夠的信息來告訴發生了什麼。腳本中的參數處理消耗的管道當然不可能。 –

+0

不幸的是我唯一遺漏的是檢查是否設置了JAVA_HOME以及類路徑的位置。但我會進一步調查。 – user83598

回答

3

首先,你的假設是不正確的。 shell解析它的命令行足以說明管道和參數之間的區別。這就是爲什麼你需要引號才能逃避重定向,管道,子殼和其他低級表達式。

現在,手頭上的問題:假設你沒有看到任何輸出當您運行

$ myScript.sh | grep something 

你可能看到effect of buffering *。不幸的是,我無法確切地告訴你它在java應用程序中是如何發生的,所以我不能給你一個直接的解決方案,但是也許如果你檢查你可以告訴的java代碼的內部。

*與輸出只是標準輸出以外的地方相反。

1

「| grep something」被吸入$ @列表是不可能的,所以應該有另一個問題。也許腳本對tty輸出使用行緩衝,否則完全緩衝? (在結束之前你是否等待腳本完成它不起作用?)「grep something」中的「something」可能會被解釋爲(意外)作爲與輸入行不匹配的正則表達式嗎?

  • 嘗試cat而不是grep something:它工作嗎?
  • 向我們展示「某物」的真正價值。
相關問題