![问题在于tmux info](https://linux22.com/image/1392464/%E9%97%AE%E9%A2%98%E5%9C%A8%E4%BA%8Etmux%20info.png)
是否有任何已知的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
没有真正尝试检查进程名称之外的任何内容。