Linux Shell Bash 交互与非交互式脚本
来源:互联网 发布:阿里云服务器怎么购买 编辑:程序博客网 时间:2024/05/19 16:05
http://blog.163.com/howl_prowler/blog/static/266197152009524105126976/
交互式的shell会在tty上从用户输入中读取命令. 另一方面, 这样的shell能在启动时读取启动文件, 显示一个提示符, 并默认激活作业控制. 也就是说, 用户可以与shell交互.
shell所运行的脚本通常都是非交互的shell. 但是脚本仍然可以访问它的tty. 甚至可以在脚本中模拟一个交互式的shell.
1 #!/bin/bash
2 MY_PROMPT='$ '
3 while :
4 do
5 echo -n "$MY_PROMPT"
6 read line
7 eval "$line"
8 done
9
10 exit 0
11
12 # 这个例子脚本, 还有上面那么多的解释
13 # 都是由Stephane Chazelas提供的(再次感谢).
让我们考虑一个需要用户输入的交互式脚本, 这种脚本通常都要使用read语句(请参考例子 11-3). 但是"现实的情况"肯定要比这复杂的多. 就目前的情况来看, 交互式脚本通常都绑定在一个tty设备上, 换句话说, 用户都是在控制终端或xterm上来调用脚本的.
初始化脚本和启动脚本都是非交互式的, 因为它们都不需要人为干预, 都是自动运行的. 许多管理脚本和系统维护脚本也同样是非交互式的. 对于那些不需要经常变化的, 重复性的任务, 应该交给非交互式的脚本来自动完成.
非交互式的脚本可以在后台运行, 但是如果交互式脚本在后台运行的话, 就会被挂起, 因为它们在等待永远不会到来的输入. 如果想解决后台运行交互式脚本的问题, 可以使用带有expect命令的脚本, 或者在脚本中嵌入here document来提供交互式脚本所需要的输入. 最简单的办法其实就是将一个文件重定向给read命令, 来提供它所需要的输入(read variable <file). 通过使用上述方法, 就可以编写出通用目的脚本, 这种脚本即可以运行在交互模式下, 也可以运行在非交互模式下.
如果脚本需要测试一下自己是否运行在交互式shell中, 那么一个简单的办法就是察看是否存在提示符(prompt)变量, 也就是察看一下变量$PS1是否被设置. (如果脚本需要用户输入, 那么脚本就需要显示提示符.)
1 if [ -z $PS1 ] # 没有提示符?
2 then
3 # 非交互式
4 ...
5 else
6 # 交互式
7 ...
8 fi
$-中是否存在选项"i".1 case $- in
2 *i*) # 交互式shell
3 ;;
4 *) # 非交互式shell
5 ;;
6 # ("UNIX F.A.Q."的惯例, 1993)
使用#!/bin/bash -i头, 或者使用-i选项, 可以强制脚本运行在交互模式下. 注意, 这么做可能会让脚本产生古怪的行为, 有时候即使在没有错误的情况下, 也可能会显示错误信息.
- Linux Shell Bash 交互与非交互式脚本
- 登录/非登录、交互/非交互式shell
- Linux 交互式Shell脚本文件
- shell脚本-添加用户(非交互式)
- linux 9 -- 交互式使用Bash Shell
- LINUX修改用户密码-交互式与非交互式
- 交互式的bash shell
- 交互式使用Bash Shell
- 交互式使用Bash Shell
- bash 深入理解:交互式shell和非交互式shell、登录shell和非登录shell的区别
- Shell脚本——与Linux Shell自动交互
- Shell(Bash) - PHP与Shell交互
- 命令 与 bash shell脚本
- 登陆shell与交互式非登陆shell的区别
- 关于“交互式-非交互式”与“登录-非登陆”shell的总结
- Django框架与linux shell 脚本无法交互问题
- Shell(Bash) - PHP与Sheel交互
- 与bash script脚本自动化交互
- 登入EBS报错:无法完成应用登录。您可能已输入无效的应用口令,或可能存在数据库连接错误
- Android ExpandableListView双层嵌套实现三级树形菜单
- mac 下 GBK 显示乱码
- Java 接口和抽象类区别
- 技术领域常见名词解释和简单介绍
- Linux Shell Bash 交互与非交互式脚本
- MySQL事务
- USB接口定义详解(图)
- C/C++内存泄漏及检测
- Angular.js入门
- 汇编-从键盘输入数据并显示的程序
- arm平台编译动态库报 relocation R_ARM_MOVW_ABS_NC 错误解决
- 通信运营商:适合你吗?
- Android和iOS在新版本中助力HTML5