检查命令是不是在 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”命令

ubuntu bashrc作用

Rviz设置延迟显示

用于检查应用程序是不是以提升的权限运行的 PowerShell 命令

如何从命令提示符检查 ZooKeeper 是不是正在运行或启动?

检查 React 应用程序是不是在 Docker 容器中运行