【问题标题】:How to run bash script when a program open in liunx在linux中打开程序时如何运行bash脚本
【发布时间】:2013-07-16 16:43:14
【问题描述】:

当我在 Ubuntu 上单击 NetBeans 或 DropBox 等程序时,有没有办法执行 bash 脚本 并在退出时执行一个 bash 脚本

我的想法是在 cronjob @reboot 上创建 bash 脚本,每秒检查一下程序是否存在于当前进程中

#!/bin/bash
NameOfprogram="NetBeans"
while [[ true ]]; do
    countOfprocess=$(ps -ef |grep $NameOfprogram | wc -l)
    if [[ $countOfprocess -gt 1 ]]; then
        #execute bash 
    fi
    sleep 1
done

但我认为这个想法不是最好的,有没有更好的方法来实现它?

【问题讨论】:

  • 这听起来像是一个简单问题的错误解决方案......
  • while [[ true ]] 检查字符串“true”是否为空。它适用于无限循环,但对[[ 的工作方式有些困惑。 while [[ false ]] 会有相同的结果。 while true 执行内置的true。
  • @Ignacio Vazquez-Abrams 有更好的解决方案吗??
  • 不知道实际问题是什么。
  • 如果您说这是一个糟糕的解决方案,那么最好的解决方案是什么?

标签: linux bash ubuntu cron


【解决方案1】:

更好的方法是将可执行文件包装在脚本中。这意味着您将带有程序名称的脚本放在您的路径中(可能是$HOME/bin),Linux 将使用它而不是真正的可执行文件。

现在您可以使用以下命令执行真正的程序:

/usr/bin/NetBeans "$@"

所以要执行真正的可执行文件,只需将绝对路径放在名称前面。奇怪的"$@" 也会传递任何可能有人给出脚本的论点。

围绕这个循环:

while [[ true ]]; do
    /usr/bin/NetBeans "$@"
done

但是有一个问题:你不能再退出这个程序了。只要您尝试,它就会重新启动。因此,如果您只想在崩溃时重新启动:

while [[ true ]]; do
    /usr/bin/NetBeans "$@" && exit 0
done

只要程序因为错误退出,就会重新启动。如果你退出它,脚本将停止。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 2010-10-13
    相关资源
    最近更新 更多