2
我目前有一個Perl腳本(我無法編輯)詢問用戶幾個問題,然後將生成的輸出打印到標準輸出。我想創建另一個腳本來調用這個腳本,允許用戶像平常一樣與它交互,然後將stdout的輸出存儲到一個變量中。調用交互式下標並將其輸出保存到變量
這裏是什麼,我試圖完成一個非常簡單的例子:
inner.pl
#!/usr/bin/perl
print "Enter a number:";
$reply = <>;
print "$reply";
outer.sh(基於由運德Cirkel here答案)
#!/bin/bash
echo "Calling inner.pl"
exec 5>&1
OUTPUT=$(./inner.pl | tee >(cat - >&5))
echo "Retrieved output: $OUTPUT"
所需輸出:
$ ./outer.sh
Calling inner.pl
Enter a number: 7
7
Retrieved output: 7
但是,當我嘗試此操作時,腳本將在「掛起」之前輸出Calling inner.pl
而不打印任何內容。
我發現了一點變通方法,使用script
命令將整個inner.sh交換存儲到一個臨時文件,然後使用sed
等來修改它以滿足我的需要。但是對於像這樣相當瑣碎的東西創建臨時文件並沒有多大意義(更不用說script
喜歡在所有內容中添加時間戳和\r
)。有沒有非script
方法來完成這一點?
你的榜樣'inner.sh'和'outer.sh'完美的工作對我來說... –
也許我過於簡單化了它,然後。原來的「inner.sh」實際上是一個Perl腳本。我對Perl沒有任何瞭解,但是這可能是我的輸出不起作用的原因嗎?也許Perl不同地處理文件描述符和標準輸出? - 以防萬一,我會將這個細節添加到我的問題中。 – spellbee2