练习 10:Bash:程序退出代码(返回状态)


原文:Exercise 10. Bash: program exit code (return status)

译者:飞龙

协议: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的退出代码,它确实是非零。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值