我在 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
- 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 的示例。
- 如果你不想使用 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$