问题在于tmux info

问题在于tmux info

是否有任何已知的tmux功能,例如tmux has-session -t <session>,但要检查 tmux服务器当前正在运行?编写自动化脚本时会很方便。检查会话是否存在时

$ tmux has-session -t SomeSession

除非 tmux 服务器已经在运行,否则用户将遇到错误

failed to connect to server

因此,我想事先检查服务器当前是否正在运行。如果正在运行,请检查会话等。有没有办法在不将管道传输到 /dev/null 的情况下使此操作静音?

答案1

跑步

if tmux info &> /dev/null; then 
  echo running
else
  echo not running
fi

答案2

[[ -n $(pgrep tmux) ]] && echo true || echo false

如果名称中带有“tmux”的进程正在运行,则打印 true,否则打印 false。

这是可行的,因为 pgrep 会查找名称中带有“tmux”的所有进程并返回其 PID。“-n”基本上测试 $(pgrep tmux) 的输出是否存在。如果输出确实存在(例如“14204 23137”),则测试结果为真。如果输出不存在(或未定义),则测试结果为假。

如果您喜欢长篇形式:

if [[ -n $(pgrep tmux) ]]; then
  echo true
else
  echo false
fi

请注意,bnjmn 所说的内容也适用于此。也就是说,如果正在运行的进程不是 tmux,但其名称中包含“tmux”,则会产生误报。

答案3

您可以用它ps -e | grep -q program来检查程序是否program正在以一般方式运行。

以 shell 为例:

if $(ps -e | grep -q tmux); then echo "Tmux is running."; fi

答案4

其他答案也存在问题,但似乎可以通过以下方法可靠地测试 Tmux 是否正在运行:

if tmux run 2>/dev/null; then
    echo "Tmux running"
else
    echo "Tmux not running"
fi

当 Tmux 未运行时运行tmux run将会将以下内容输出到标准错误(这就是为什么/dev/null需要将 stderr 重定向到):

no server running on /tmp/tmux-1000/default

我最初尝试过tmux run-shell true(如果你想简洁的话,也可以尝试等效的tmux run :),两个命令都运行得很好,但是省略整个运行的 shell 命令(如上所述)也可以工作(并且可能更有效率,因为不需要运行任何 shell 命令。

问题在于tmux info

如果正在运行的 Tmux 服务器中没有任何会话,则返回 false。(例如,如果您使用 启动了服务器tmux -D &。)

问题在于pgrep tmux

如果发生以下情况则返回 true任何用户有一个名为正在tmux运行的进程——尽管这可以通过使用来改进,但pgrep -u"$USER" tmux没有真正尝试检查进程名称之外的任何内容。

相关内容