有一个交互式shell控制台,我可以进入它,在控制台内运行特定的命令集并退出它。 现在我想编写一个连接到交互式shell控制台并以静默方式运行命令的bash脚本,最后退出而不进行任何交互。 这意味着我希望以非交互方式自动化所有内容。 任何想法我怎样才能做到这一点? 我正在尝试类似 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我正在写一个可以在命令行或交互模式下运行的实用程序。 在代码中,我想检查是否设置了交互式标志,然后将问题回显给用户以读取输入。 但是,对于任何问题,我都不希望与if条件一起检查交互式标志。 在bash脚本中,有没有更有效的方法来实现这一目标?
任何指针,不胜感激!
谢谢
像这样的东西?
#! /bin/bash
function interactive {
shift
while read line; do
something with $line
done
}
getopts 'i' option
[[ $option = 'i' ]] && interactive "$@"
请注意,如果您有多个选择,则这不是最佳样式。 在这种情况下,使用while getopts
并使用参数索引进行平移。
如果要告诉外壳程序是否处于外壳程序定义的“交互模式”下,则可以使用类似以下内容的方法:
case $- in
*i*) # Interactive
;;
*) # Non-interactive
;;
esac
但是,这可能不是您想要的。 例如,默认情况下,Shell脚本为“非交互式”。
如果您想知道是否可以问用户一个问题,那么您对查找stdin是否已连接到终端更感兴趣。 在这种情况下,可以对文件描述符零(这是标准输入)使用-t
测试:
if [ -t 0 ]
then
# Interactive: ask user
read -p "Enter a color: " color
read -p "Enter a number: " number
else
# Non-interactive: assign defaults
color="Red"
number=3
fi
echo "color=$color and number=$number"
如果您的脚本有可能远程运行,例如ssh
,则需要稍微复杂一些的测试 :
if [ -t "$fd" ] || [ -p /dev/stdin ]
then
echo interactive
else
echo non-interactive
fi
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.