我想每 30 秒在 bash 中执行一个命令,并将其作为后台作业运行。形式这个帖子,我认为使用 watch 命令很有用。然而,每次我尝试将其设置为背景时,它都会停止。
watch -n 1 'date >> dateFile.txt'
作品。我可以cat dateFilet.txt
看到一堆线条。
watch -n 1 'date >> dateFile.txt' &
回报
[1]+ Stopped watch -n 1 'date >> dateFile.txt'
执行bg
再次返回同一行。
我究竟做错了什么?我如何解决它?我最终想要做的是每分钟左右获取一个文件,以使 bash 会话中的某些变量保持最新。
答案1
在 bash 中,您可以使用以下命令轻松完成此操作PROMPT_COMMAND
变量(来自man bash
):
提示命令
如果设置,则该值将在发出每个主提示之前作为命令执行。
因此,如果您将这样的内容添加到您的~/.bashrc
:
PROMPT_COMMAND=". /path/to/file"
您将可以使用该文件中定义的所有变量。
答案2
在你的crontab
:
* * * * * date >> dateFile.txt & sleep 30; date >> dateFile.txt &
很简单,不是吗? =)
(最好输入命令的完整路径date
)
另一个解决方案:
while true; do date >> dateFile.txt & sleep 30; done
答案3
我最终想要做的是每分钟左右获取一个文件,以使 bash 会话中的某些变量保持最新。
- 你不能从子进程中执行此操作。
- 你不能从父进程执行此操作。
- 你不能从您希望它影响的进程以外的任何进程执行此操作。
更改进程的环境与更改进程的私有内存相同(事实上,这正是所涉及的)。绝对不允许!这就是为什么工控机就是这样一个精致的境界。