微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

即使在退出命令之后,Shell脚本仍然继续运行

我的shell脚本如下所示:

#!/bin/bash # Make sure only root can run our script [ $EUID -ne 0 ] && (echo "This script must be run as root" 1>&2) || (exit 1) # other script continues here...

当我用非root用户运行上面的脚本时,它会打印消息“This script …”,但它不会退出,它会继续使用剩余的脚本。 我究竟做错了什么?

注:我不想使用条件。

在bash中search和回显一部分string

不读最后一行文件的脚本

从命令行运行Scheme

如何在Linux内核中启用CONfig_PREEMPT选项?

linux高内核cpu使用率在内存初始化上

我可以使用单个Jsch对象打开多个频道吗?

C ++和Thrift:参考需要开始

是否需要在softirq上下文中调用rcu_read_lock

在Linux上的HTTP POST调用中模拟延迟

我可以在Linux上签署iOS应用程序吗? (也许使用codeign的端口?)

你正在运行echo并exit subhells。 退出呼叫只会离开这个子shell,这是有点没有意义的。

试试:

#! /bin/sh if [ $EUID -ne 0 ] ; then echo "This script must be run as root" 1>&2 exit 1 fi echo hello

如果由于某种原因,你不想要一个条件,只要使用:

#! /bin/sh [ $EUID -ne 0 ] && echo "This script must be run as root" 1>&2 && exit 1 echo hello

注意:no ()和固定的布尔条件。 警告:如果echo失败,该测试也将无法退出。 if版本更安全(更易读,更容易维护IMO)。

我认为你需要&&而不是|| ,因为你想回声并退出(不回显或退出)。

另外(exit 1)会运行一个退出而不是退出当前shell的子shell。

以下脚本显示您需要:

#!/bin/bash [ $1 -ne 0 ] && (echo "This script must be run as root." 1>&2) && exit 1 echo Continuing...

运行这个./myscript 0给你:

Continuing...

而./myscript 1给你:

This script must be run as root.

我相信这就是你要找的。

我会这样写:

(( $EUID != 0 )) && { echo "This script must be run as root" 1>&2; exit 1; }

使用{ }进行分组,该分组在当前shell中执行。 请注意,大括号和结尾的分号周围的空格是必需的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐