在分离的 tmux 会话中从包含 2 个或更多函数的文件运行特定函数

在分离的 tmux 会话中从包含 2 个或更多函数的文件运行特定函数

我将 Ubuntu 16.04 与 Bash 一起使用,并且我有一个包含许多不同函数的文件。在这些函数之间,有一个:

tdm() {
    chmod -R a-x,a=rX,u+w "$drt"/phpmyadmin/
    sleep 2h
    chmod -R 000 "$drt"/phpmyadmin/
    tmux kill-session
}

这个功能存在是因为我安装了 phpmyadmin (PMA) 之后,限制出于chmod /usr/share/phpmyadmin 000 -R安全原因,上面的函数使用我暂时允许 PMA 2 小时(2 小时通常足以让我在数据库中进行更改)。因此得名 TDM(临时数据库管理)。

请注意,该函数没有调用。它没有,因为我tdm在获取包含它的文件后,通过执行直接从 CLI 调用它。


我的问题

我的问题是sleep函数内的命令阻止我使用控制台(任何前台更改都将停止sleep)。

因此,我需要tdm在分离会话中执行tmux,它将把权限更改为755/ 644sleep2小时(不会中断我在控制台中的工作),然后它将再次锁定 PMA,并终止分离会话tmux

我在这里使用的唯一原因tmux是该sleep实用程序不会中断我正在使用的当前会话,如上所述。


到目前为止我想到的

1 - 使用 Bash 背景代替 tmux:

我可以删除该tmux部分并在后台调用该函数,&但我不希望这样;我希望在运行该函数时不使用任何参数。

2 - 专用文件:

tdm在分离会话中运行的一种方法tmux是将子例程放入脚本中专用文件alias,然后为该文件创建一个,并直接运行它:

1)创建专用文件:

$HOME/tdm.sh

2)添加一个alias"$HOME"/.bashrc

alias tdm="tmux new-session -d 'bash $HOME/tdm.sh'"

3)来源bashrc

source "$HOME"/.bashrc

4)使用别名:

tdm

但我不想将函数放在专用文件的脚本中;我想保留它包含其他功能的当前文件。


我的问题

如何在独立tmux会话中从包含其他函数的文件内部运行该函数?

更新

Adisownnohup解决方案可能会很好。只要我只在tdm不带参数的情况下运行该函数,那么我不在乎它是否是用disown,nohup或完成的tmux

答案1

使用;

tdm() {
  chmod -R a-x,a=rX,u+w "$drt"/phpmyadmin/ && \
  echo "chmod -R 000 \"$drt\"/phpmyadmin/" | at "now + 2h"
}

或者睡觉

诺哈普

tdm() {
  chmod -R a-x,a=rX,u+w "$drt"/phpmyadmin/ && \
  nohup "sleep 2h; chmod -R 000 \"$drt\"/phpmyadmin/" &
}

或者屏幕

tdm() {
  chmod -R a-x,a=rX,u+w "$drt"/phpmyadmin/ && \
  screen -S tdm -d -m "sleep 2h; chmod -R 000 \"$drt\"/phpmyadmin/"
}

或者多路复用器

tdm() {
  chmod -R a-x,a=rX,u+w "$drt"/phpmyadmin/ && \
  tmux new -d -s tdm "sleep 2h; chmod -R 000 \"$drt\"/phpmyadmin/"
}

答案2

如果我明白你想要做什么,那么你使用的工具对于这项工作来说太强大了。不要仅为单个简单脚本生成专用会话,而是使用和tmux从命令行运行该脚本。nohup &disown

nohup tdm DRT & disown

答案3

不确定这是否是您所要求的,但您可以直接传入要在分离会话中运行的命令的参数:

tmux new-session -n:myTest 'chmod -R a-x,a=rX,u+w "$drt"/phpmyadmin/;sleep 2h;chmod -R 000 "$drt"/phpmyadmin/'

答案4

在评论中,用户Rich提供了以下解决方案,但希望不要公开答案。

我明白他的意思是:

tdm() {
    chmod -R a-x,a=rX,u+w "$drt"/phpmyadmin/
    echo "chmod -R 000 $drt/phpmyadmin/" | at now + 2 hours
}

相关内容