如何获取通过Rofi启动的应用PID并用于脚本?
获取Rofi启动应用的PID方法
当然可行,以下是两种可靠的实现方式:
方法一:自定义启动脚本(推荐)
通过修改Rofi的drun启动器为自定义脚本,让脚本在启动应用时直接输出PID,方便后续捕获。
- 创建自定义启动脚本
rofi-launcher.sh,内容如下:
#!/bin/bash # 启动目标应用并后台运行,同时输出其PID "$@" & echo $!
- 给脚本添加执行权限:
chmod +x rofi-launcher.sh
- 修改Rofi配置文件(通常路径为
~/.config/rofi/config.rasi),指定drun使用这个脚本启动应用:
configuration { drun-launcher: "/绝对路径/rofi-launcher.sh"; }
注意替换成你实际存放脚本的绝对路径
- 现在运行Rofi并捕获PID:
# 启动Rofi,选中应用后会返回对应的PID APP_PID=$(rofi -show drun) # 后续即可使用$APP_PID变量,比如输出PID echo "启动的应用PID: $APP_PID"
方法二:对比启动前后的进程列表(简易但有局限)
如果不想修改Rofi配置,可以通过对比Rofi启动前后的用户进程列表,找出新启动的应用PID。但这种方法在同时启动多个程序时会出错,仅适合单次启动场景:
# 记录当前用户的所有PID current_pids=$(pgrep -u $USER) # 启动Rofi rofi -show drun # 记录Rofi退出后的用户PID列表 new_pids=$(pgrep -u $USER) # 对比两个列表,找出新增的PID(即刚启动的应用PID) APP_PID=$(comm -13 <(echo "$current_pids" | sort) <(echo "$new_pids" | sort)) echo "启动的应用PID: $APP_PID"
内容的提问来源于stack exchange,提问作者Liam McCartney
相关产品推荐
相关产品推荐

