如何从 AIX 中的“echo $-”输出中区分交互式和非交互式登录?

Posted

技术标签:

【中文标题】如何从 AIX 中的“echo $-”输出中区分交互式和非交互式登录?【英文标题】:How to differentiate between interactive and non-interactive logins from "echo $-" output in AIX? 【发布时间】:2020-08-23 06:34:41 【问题描述】:

我在 AIX (kshell) 上这样做

当我在本地echo $- 时,我得到ism 的输出,当我远程运行时ssh test_id@sandbox "echo $-"

$ echo $-
ism

我正在从远程服务器到另一台 AIX 服务器运行它

ssh test_id@sandbox "echo $-"
himBH

哪个是交互式的,哪个是非交互式的

【问题讨论】:

每当您在答案中看到i 时,它都是交互式的。由于ismhimBH 都包含i,它们都是交互式的。 谢谢@LorinczyZsigmond 的帮助。如果它是非交互式的,你能不能说一下我可以期待什么O/P? 基本上,它在交互时和非交互时处理不同的启动文件(rcfiles)。也可以是'login'和'not login',所以有四种组合:login,not loginxinteractive,not interactive 【参考方案1】:

如果“交互式”是指有一个终端与连接关联,我以前公司的AIX ksh一般用这种方法:

if tty -s
then
     do-coding-for-sessions-with-terminal
else
     do-nothing
fi

【讨论】:

【参考方案2】:

正如 cmets 所指出的,i 变量中 $- 的存在表明 shell 是交互式的。引入an answer from Tim Kennedy over at U&L:

case "$-" in
    *i*)
        interactive=1
        ;;
    *)
        not_interactive=1
        ;;
esac

上面的代码使用case statement 来查看$- 变量是否包含i

【讨论】:

以上是关于如何从 AIX 中的“echo $-”输出中区分交互式和非交互式登录?的主要内容,如果未能解决你的问题,请参考以下文章

使用 IF 和 echo 命令输出打印/邮件

利用DBMS_FILE_TRANSFER迁移数据库从AIX至Linux

从两个数组中区分额外的元素?

perl 脚本来搜索 java 源代码中区分大小写的文件名

AIX 机器中交换信息的正则表达式

如何区分静态函数与 C 中的 nm 或 readelf 输出