繁体   English   中英

shell脚本:检查变量,然后执行交互模式

shell script : check variable and then execute interactive mode

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在写一个可以在命令行或交互模式下运行的实用程序。 在代码中,我想检查是否设置了交互式标志,然后将问题回显给用户以读取输入。 但是,对于任何问题,我都不希望与if条件一起检查交互式标志。 在bash脚本中,有没有更有效的方法来实现这一目标?

任何指针,不胜感激!

谢谢

2 个回复

像这样的东西?

#! /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
1 避免在shell脚本中使用交互模式

有一个交互式shell控制台,我可以进入它,在控制台内运行特定的命令集并退出它。 现在我想编写一个连接到交互式shell控制台并以静默方式运行命令的bash脚本,最后退出而不进行任何交互。 这意味着我希望以非交互方式自动化所有内容。 任何想法我怎样才能做到这一点? 我正在尝试类似 ...

2 控制台模式下InstallAnywhere的交互式Shell脚本

我在Linux的控制台模式下使用InstallAnywhere进行安装,并希望在完成安装后运行一些交互式Shell脚本。 “交互式”是指脚本应提出一些问题并接受用户输入。 我尝试使用“执行目标文件”操作来运行它,但是脚本未将任何内容打印到控制台(由于将调试信息打印到输出文件,因此该脚本确 ...

3 通过Apache执行交互式Shell脚本

我有一个需要用户输入的Shell脚本(“请选择y / n:”等) 我希望通过网页执行此操作。 关于如何执行此操作的任何想法? 我试过了php shell_exec ...,但是它只是执行命令并且不提示输入。 不知道这是否可能...但是任何帮助将不胜感激。 干杯 ...

4 以phantomjs交互式(REPL)模式执行脚本[重复]

这个问题在这里已有答案: PhantomJS:在REPL 1回答中 运行时,page.open()没有响应 当我在phantomjs非交互模式下运行时,我有一个文件运行并将输出打印到屏幕 在phantonjs中,交互式(REPL)模式有一种运行js文件的方法 ...

5 Emacs:以shell脚本模式执行代码

在Emacs的sh模式中,我一直在寻找一种直接在当前缓冲区中执行shell脚本的方法,就像在Python模式下的Cc Cc一样。 使用M-! 真的很累。 任何数量的谷歌搜索都无济于事。 这可能吗? ...

2009-12-09 06:27:03 3 7840   emacs
7 shell 脚本在交互模式下运行 Racket 程序时出错

我制作了一个 shell 脚本,它接收一个球拍文件作为参数,并使用它来运行下面的命令来执行文件并保持交互模式。 问题是,当我运行脚本时,上面的命令在没有最后一个单引号的情况下执行,这会生成一条错误消息。 我尝试在命令的末尾(脚本内部)添加更多字符,以查看它是否只是忽略了最后一个字符,但是没有用 ...

8 如何使用java Runtime执行交互式shell脚本?

我想知道有没有办法执行以下shell脚本,它等待使用java的Runtime类的用户输入? 我使用以下java代码来执行此任务,但它只显示空白控制台。 } 事情就是当我执行上面的程序时,我相信它将执行一个shell脚本,而shell脚本将等待用户输入,但它只是打印当前目录然 ...

9 使用 docker run interactive 执行本地 shell 脚本

我可以使用docker run -it在 docker 容器中执行本地 shell 脚本吗? 这是我可以做的: 我的本地机器上有一个 shell 脚本 你好.sh: 我想在容器内执行本地 shell 脚本并读取返回的值: ...

2021-07-22 02:30:20 2 42   docker
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM