检查命令是不是在 bashrc 中运行
Posted
技术标签:
【中文标题】检查命令是不是在 bashrc 中运行【英文标题】:check if command is running in bashrc检查命令是否在 bashrc 中运行 【发布时间】:2014-10-21 07:58:06 【问题描述】:这是我的问题。由于我的保管箱文件夹存在自动同步问题。我必须在我的 .bashrc 中添加“~/.dropbox-dist/dropboxd &”。因此,每当我打开终端时,它都会自动开始同步。当我想在终端中添加另一个选项卡时,就会出现问题。我收到以下警告:“另一个 Dropbox (8664) 实例正在运行! ”。 虽然它不影响我的保管箱,但它很烦人。 我搜索了但不幸的是我在网上找不到解决方案。因此,我们将提前感谢任何帮助。
谢谢
【问题讨论】:
Linux/Unix command to determine if process is running? 的可能重复项 这听起来不像是应该在.bashrc
中而是在启动时运行的命令。你试过了吗?
使用ps
(和-C
)检查进程是否正在运行,如果没有则启动。或者,如果您不想看到错误消息,只需启动并将错误消息重定向到 /dev/null
。
@TimZimmermann 谢谢,我如何在启动时运行它,关键是我没有 root 访问权限。
您可以创建一个在重新启动时运行的 cronjob,假设您使用的是支持它的 Linux。尝试运行 crontab -e
并添加行 @boot /home/user/.dropbox-dist/dropboxd
。请注意绝对路径而不是~
,因此您必须替换您的用户名。
【参考方案1】:
将它添加到你的 .bashrc
ps cax | grep dropbox > /dev/null
if [ $? -eq 0 ]; then
echo "Process is running."
else
~/.dropbox-dist/dropboxd &
echo "Process is not running."
fi
【讨论】:
如果系统上的另一个用户正在运行它,这将错误地将进程标记为已运行。此外,grep
将匹配包含 dropbox
作为子字符串的进程名称,而不仅仅是完全匹配(尽管可以使用更严格的正则表达式和/或其他选项来修复)。
当然,任何看起来像 pipeline; if [ $0 -eq 0 ]; then
的东西都更符合地道写作 if pipeline; then
【参考方案2】:
为您的 .bashrc
添加一个守卫,仅在它尚未运行时运行它。
pidof -c dropboxd || ./~dropbox-dist/dropboxd &
(这是假设您拥有 pidof
,但在大多数现代 Linux 发行版上应该是微不足道的。)
【讨论】:
如果可能有多个用户运行相同的命令,您可能希望在参数中指定pidof
的完整路径。不幸的是,似乎没有只检查您自己的流程的选项。但很可能只有您会从主目录树运行二进制文件。【参考方案3】:
根据@tripleee 的回答构建,以下内容适用于official Dropbox Python control script(例如,用于无头数字海洋盒)并且不会在屏幕上输出 pid:
pidof -c dropbox > /dev/null || ~/bin/dropbox.py start # start dropbox
假设您已将 dropbox.py 存储在 ~/bin 中并标记为可执行文件。
【讨论】:
不完全清楚您从哪里获取 python 脚本 - 您的意思是 this 吗? @SimonMᶜKenzie 是的官方 dropbox.py,非图形 Linux 系统需要它。我现在已经编辑澄清。以上是关于检查命令是不是在 bashrc 中运行的主要内容,如果未能解决你的问题,请参考以下文章
BASH 和/或 .BASHRC 在 SU 或 SSH 登录后无法正常工作,除非运行“bash”命令
用于检查应用程序是不是以提升的权限运行的 PowerShell 命令