我在寫一個應該對用戶「透明」的bash腳本。它從用戶那裏讀取命令並攔截它們,只允許其中一些命令由bash執行,具體取決於某些標準。它(基本上)是這樣工作的:僅當命令失敗時才重定向stdout?
while true; do
read COMMAND
can_be_done $COMMAND
if [ $? == 0 ]; then
eval $COMMAND
if [ $? != 0 ]; then
echo "Error: command not found"
fi
fi
done
問題是,當命令失敗時,您還可以將東西打印到控制檯。但是,如果我保持在一個變量的結果,只打印它時,它不會失敗,就像這樣:
RESULT=$(eval $COMMAND)
然後還有另外一個問題:在特殊格式丟失(例如,「LS --color 「不再顯示顏色)
我的問題是:如果成功,是否有一種方法可以將命令打印到標準輸出,但如果失敗則會將其打印到/ dev/null?
顏色不會丟失對我來說。 RESULT = $(eval ls --color); echo「$ RESULT」 – dogbane
@dogbane'ls --color'表示'ls --color = always'。通常'ls'被別名爲'ls --color = auto'或'ls --color = tty',即它只在stdout是終端('isatty')時纔打印顏色代碼。 –
我剛剛意識到,你是對的!但由於某些原因,「ls --color = auto」(這是用於ls的別名)。我刪除了「= auto」,現在用這種方法顯示顏色。 –