如何在共享的 bashrc 中检测 ubuntu?

如何在共享的 bashrc 中检测 ubuntu?

我在 ubuntu 和 archlinux 之间共享我的 .bashrc(实际上是我的所有点文件)。由于它们之间的路径可能不同,我想只在 ubuntu 上运行一些命令(而其他命令只在 archlinux 上运行)。我如何检测我在 .bashrc 文件中是否正在运行 ubuntu?检测 Debian 可能会有效。

答案1

我的机器上的结果uname -v包含“Ubuntu” - 也许您可以使用它?但是,更便携的解决方案是检查路径是否存在:

FOO=/path/to/executable
if [ -x "$FOO" ]
then
    "$FOO" --option
fi

这是 GNU makefile 中的标准方式。

答案2

认为这是不同的电脑,没什么不同操作系统

file=~/.bashrc-$HOSTNAME
if [[ -f $file ]]; then
    . "$file"
end

答案3

修订版:原始版本不适用于 Ubuntu 10.04,因为 uname -v 中未提及 Ubuntu。/etc/lsb-release 文件更适合此用途,因为它有一条明确的 DISTRIB_ID 行设置为 Ubuntu。

根据 l0b0 的响应,此 sh 脚本使用 if 语句检测 Ubuntu。正如其他人指出的那样,根据您正在执行的操作,检测特定程序或功能可能更合适,但作为编写过 Ubuntu 特定安装程序的人,我理解有时您只需要进行简单的烟雾测试以确保有人没有误用它们。

#!/bin/sh

UBUNTU=`grep -i ubuntu /etc/lsb-release | wc -l`
if [ "$UBUNTU" != "0" ] ; then
  echo "This is so totally Ubuntu!"
fi

答案4

  1. lsb_release -i 应该直接给出发行版/分销商 ID。例如,我们可以这样做

    raub@desktop:/tmp$ lsb_release -i
    分销商 ID:Ubuntu
    raub@desktop:/tmp$

    在 ubuntu 盒子里或

    [raub@otherdesktop ~]$ lsb_release -i
    Distributor ID: CentOS
    [raub@otherdesktop ~]$ 
    

    在 centos 盒子里。然后你可以做更多有趣的事情,例如

    raub@desktop:/tmp$ lsb_release -i | awk '{ print $3}' | tr 'A-Z' 'a-z'
    ubuntu
    raub@desktop:/tmp$
    

    然后可以将其添加到变量并在其他地方使用,如 user1179239 的示例。

  2. 如果你不想使用 lsb_release,请尝试 /etc/issue

    [raub@otherdesktop ~]$ cat /etc/issue
    CentOS 版本 6.8(最终版)
    内核 \r 位于 \m 上
    
    [raub@otherdesktop ~]$
    raub@desktop:/tmp$ cat /etc/issue
    Ubuntu 16.04.1 LTS
    
    raub@desktop:/tmp$

相关内容