linux - 从另一个 shell 脚本执行 shell 脚本并传递关键字作为参数

标签 linux bash shell

我编写了一个脚本文件来检查磁盘上的可用空间。如果已用空间高于阈值,我希望重新启动该服务器上的应用程序。

下面是我编写的代码。

CURRENT=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
THRESHOLD=60
echo $CURRENT
if [ "$CURRENT" -gt "$THRESHOLD" ] ; then
echo "inside"
    sudo ./script2.sh stop
    sudo ./script2.sh start
fi

script2.sh 采用 start|stop 作为参数。

直接从终端执行时,命令 sudo ./script2.sh stopsudo ./script2.sh start 可以正确执行。

第一个命令 sudo ./script2.sh stop 不执行。我猜测是因为 stop 是 Linux 中的一个关键字,因此导致了这个问题。

第二个命令 sudo ./script2.sh start 执行(但由于第一个脚本未执行而给出“地址已在使用中”错误)。

我知道我可能必须将参数值从 start 更改为其他值,但是有没有任何解决方案可以将 stop 作为参数传递给脚本?

最佳答案

尝试使用 root 权限实例化 shell 并在其中运行脚本:

#!/bin/bash
CURRENT=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
THRESHOLD=60
echo $CURRENT
if [ "$CURRENT" -gt "$THRESHOLD" ] ; then
echo "inside"
    sudo bash -c  './script2.sh stop'
    sudo bash -c  './script2.sh start'
fi

这也可以在一行中完成..类似 sudo bash -c './script2.sh stop; ./script2.sh start'.

另请注意,您没有在第一行指定 shell,请使用 shebang,如 #!/bin/bash 或您正在使用的任何 shell

关于linux - 从另一个 shell 脚本执行 shell 脚本并传递关键字作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46319788/

相关文章:

linux - 使用 Pexpect 或 Expect 进行 ssh 任务,以及如何捕获错误

bash - Bash 子字符串替换 ${foo/a/b} 的 Shell 通用等价物

python - 通过 ssh 验证文件是否存在

linux - 如何根据正则表达式模式将流拆分为 stdout+stderr?

java - 通过 exec 或 shell_exec 执行 java 会出错

c# - 立即停止所有 SSH 连接

linux - 移动 script.sh 到 bin

linux - 检查 Linux 上任何事件的 screen session

bash - shell_exec 在 php web 应用程序中不工作

bash - 在 C 中处理 Ubuntu shell 中的特定管道命令