练习 10:Bash:程序退出代码(返回状态)
2017-10-09 14:13
363 查看
译者:飞龙
协议:CC BY-NC-SA 4.0
自豪地采用谷歌翻译
让我们假设你要复制一个目录。你可以通过键入
cp -vR /old/dir/path /new/dir/path来执行此操作。发出此命令后,你可能想知道如何进行。目录是否被复制?还是出现了一些错误,因为目标目录空间不足,或其他出现错误的东西?
为了理解它是如何工作的,你必须了解两个程序如何通信。我们先这样说,bash 只是另一个程序,所以一般来说,当你发出上述的
cp命令时,一个程序(bash,它是父进程)调用了另一个程序(
cp,它是子进程)。
在 Linux 中,有一个标准机制,用于获取从子进程到父进程的信息,这个机制称为退出状态或返回代码。通过使用这种机制,当子进程完成其工作时,一个小的数字从子进程(或被调用者,这里是
cp)传递给父进程(或调用者,这里是 bash)。当程序在执行期间没遇到错误时,它返回
0,如果发生某些错误,则此代码不为零。就是这么简单。Bash
中的这个退出代码保存到
?环境变量,你现在知道了,可以使用
$?来访问。
让我再次重复一下我现在所说的话:
Bash 等待你的输入 Bash 解析你的输入 Bash 为你启动程序,并等待这个程序退出 程序启动 程序做你让他做的事情 程序生成了退出代码 程序退出并且将退出代码返回给 Bash Bash 将这个退出代码赋给变量 ?
现在你学到了如何打印出你的程序的退出状态。
这样做
1: ls 2: echo $? 3: ls /no/such/dir 4: echo $?
你会看到什么
user1@vm1:~$ ls hello.txt ls.out user1@vm1:~$ echo $? 0 user1@vm1:~$ ls /no/such/dir ls: cannot access /no/such/dir: No such file or directory user1@vm1:~$ echo $? 2 user1@vm1:~$
解释
打印出一个目录,成功。打印出
ls的退出代码,它是
0,这意味着
ls没有遇到任何错误。
尝试打印出不存在的目录,当然失败。
打印
ls /no/such/dir的退出代码,它确实是非零。
相关文章推荐
- android按2次返回键退出程序的代码
- 按二次返回键退出程序代码
- n的阶乘;计算1!+2!+3!+4!+...+10!;编写代码,演示多个字符从两边移动,向中间汇聚;求ax^2+bx+c=0的解;写一个程序返回参数二进制中1的个数;6.求两个数的最大公约数。
- ANDROID 实现 再按一次返回键退出程序 代码片段
- 几行代码实现Android 点击两次返回键退出程序
- ANDROID 实现 再按一次返回键退出程序 代码片段
- android按2次返回键退出程序的代码
- 防止用户误操作返回键导致程序退出,监听back键的状态做统一处理
- android连续按两次返回退出程序(完整代码)
- Android中的“再按一次返回键退出程序”代码实现
- 热键启动屏保程序,并使屏保程序播放图片,退出后返回锁屏状态
- 按返回键退出程序但不销毁代码,像QQ一样,后台运行
- Android双击返回键退出程序代码
- main 函数的返回值用于说明程序的退出状态
- Android中的“再按一次返回键退出程序”代码实现
- 程序代码中退出函数exit()与返回函数return ()的区别
- Android按返回键退出程序但不销毁代码
- 练习写C++代码(10)--实现简单的时钟类2
- Android中的“再按一次返回键退出程序”实现
- android 程序退出的通用代码