我在写一个应该对用户“透明”的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”,现在用这种方法显示颜色。 –