2016-12-30 42 views
1

我試圖將典型的UNIX命令jmap -heap $(pgrep java)轉換爲Ammonite-Shell的命令。是否可以在Scala Ammonite shell中嵌套命令調用?

我到目前爲止的嘗試:%'jmap("-heap", %'pgrep("java"))

我得到錯誤SyntaxError: found "%'jmap(\"-heap\", %'pg", expected "while" | ...這似乎表明pgrep的內部調用並沒有實際翻譯爲命令調用,只是作爲字符串傳入。

回答

2

在亞捫人中,單個%產生一個子過程並打印出其結果。爲了訪問命令輸出,您需要使用%%運算符,該運算符將返回CommandResult對象。該對象包含out字段,該字段是其輸出的流。

可以通過嵌套這樣說:

%jmap("-heap", (%%pgrep("java")).out.lines.take(1)) 
+0

看起來正確,但我得到'%% p纖ep(的 「java」)'產生 'ammonite.ops.ShelloutException:CommandResult 1',這似乎奇;當我在tcsh中運行它時,我得到的退出代碼爲零。運行'%pgrep(「java」)'時,我也會得到'InteractiveShelloutException',這看起來確認了菊石的非零退出狀態。 – bbarker

+0

這很奇怪,這個子過程在蝗蟲中輸出了什麼? – adamwy

+0

我今天試了一下,它的工作......不確定區別,但也許它試圖附加到它沒有訪問的java進程。 – bbarker