2013-10-22 74 views
1

使用bash,如何在一行中將一個命令的輸出文件作爲第二個命令中的變量使用?在單個bash行中嵌套命令

我正在嘗試使用流式傳輸器和mutt使用我的攝像頭拍攝照片,然後通過電子郵件將其發送到電子郵件地址。我已經得到了下面的內容,但不知道如何告訴mutt使用在以前的(流轉命令)命令中創建的文件。

streamer -o image.jpg && echo "email body" | mutt -a (file from previous command) -s Subject -- [email protected] 
+1

如果前一個命令的文件名是'image.jpg',那麼就使用該名稱。或者輸出來自先前命令的標準輸出? – lurker

+1

什麼不起作用?提供更多細節。你的語法看起來很好。 –

+0

我想讓mutt從上一個命令中獲取輸出文件,而不管文件名是什麼。我想要做的是在我的Ubuntu桌面上創建一個執行此命令的快捷方式(作爲一項安全功能,但渴望瞭解它是如何工作的)。但是,如果多次執行該命令,那麼image.jpg文件將被覆蓋或提示覆蓋哪個是我想要避免的。 – user2907346

回答

0

AFAIK沒有這種方法。

你可以做的是以下

OUTPUT_FILE="image.jpg"; streamer -o ${OUTPUT_FILE} && echo "email body" | mutt -a ${OUTPUT_FILE} -s Subject -- [email protected] 

在您的例子輸出文件名,甚至靜態的,所以你可以只硬編碼。

+0

謝謝,這很有用。不知道你是如何在命令行中聲明一個變量的,它就這麼簡單! – user2907346

0

如果我瞭解streamer的作品,你可以使用進程替換:

echo "email body" | mail -a <(streamer) 

外殼提供了-a選項然後mail可以讀取訪問的streamer標準輸出的文件名。

否則,僅使用名稱由mbratch的建議,因爲與郵件的管道將不運行,直到streamer成功完成:

streamer -o image.jpg && echo "email body" | mail -a image.jpg 

或使用有關命令行的一些知識,以避免打字image.jpg兩次,使用

streamer -o image.jpg && echo "email body" | mail -a !#:2 

重用當前命令行的第3個字(從0開始計數)抓住streamer使用用於輸出的文件的名稱。

+0

我試過替換和Mutt咳嗽錯誤,說它不能將物理攝像頭設備(/ dev/fd/63)附加到電子郵件。我會嘗試其他建議,謝謝! – user2907346

+0

'/ dev/fd/63'不是網絡攝像頭,而是shell爲'streamer'分配的文件描述符。看起來'mutt'嘗試以與進程替換工作方式不兼容的方式使用該文件。 – chepner