已取消,nohup或&Mac OS zsh ...没有按预期工作

Ell*_*ott 2 macos sleep zsh background-process

你好.我是shell的新手,正在开发我的第一个kludged一起脚本.我读过所有在管间和SO还有很多很多地方disown,nohup,&return解释,但事情是不是为我工作.

我想要一个更简单的计时器.该脚本要求用户输入小时,分钟等,然后:

echo "No problem, see you then…"
sleep $[a*3600+b*60+c]
Run Code Online (Sandbox Code Playgroud)

此时(在第一行或第二行,不确定)我希望脚本或脚本中的特定命令成为后台进程.也许是一个守护进程?因此,即使计时器仍将按计划进行

  • 终端窗口关闭
  • 终端应用程序完全退出
  • 计算机进入睡眠状态(我意识到我可能需要一些不同的代码来唤醒mac本身)
  • 在"没问题"行后,我想要一个return命令,以便现有的shell窗口在此期间仍然有用.

    终端通知命令(定时器唤醒)在上述某些使用情况下立即被调用(我现在不记得哪个),然后在正确的时间进行第二次通知.在return任何地方使用命令基本上似乎退出脚本.

    我不清楚的一件事是,是否/如何disown,nohup等等适用于命令进程与脚本进程,即,它们中的任何一个只能在脚本内部的命令上正常工作(如果不是,如何将脚本初始化为仍然要求输入的后台进程).

    也许我应该用一些替代品sleep

    qqx*_*qqx 5

    没有必要使用单独的脚本或让脚本自行运行,以便让它的一部分在后台运行.

    一种更简单的方法是将您想要背景的部分(睡眠和跟随命令)放在括号内,然后在它们后面添加一个&符号.

    所以脚本的结尾看起来像:

    (
      sleep $time
      # Do whatever
    )&
    
    Run Code Online (Sandbox Code Playgroud)

    这将导致代码的这一部分在放置在后台的子shell中运行,因为在第一个shell将立即退出返回控件到交互式shell之后没有代码.