编辑

编辑

尝试在精简的 Ubuntu 安装中运行一些 .sh 脚本,但我收到以下样式的消息:

./my_script: 61: [[: not found
./my_script: 61: ==: not found
./my_script: 61: ==: not found
./my_script: 61: ==: not found
./my_script: 67: [[: not found
./my_script: 73: [[: not found

显然有些地方不太对劲:)

脚本开头为:

#!/bin/sh

编辑

如果我像这样启动它,它可以正常运行:

bash ./my_script

编辑2

抱歉,这个问题问得太愚蠢了,我不需要再多解释 :) 这个脚本在一些 RHEL 机器上运行良好,无需更改 - 我需要对 Ubuntu 机器进行哪些更改才能使脚本正常工作,无需修改脚本

答案1

您需要创建/bin/sh一个符号链接到/bin/bash

$ cd /bin
$ sudo ln -sf bash sh

此开关可能有未知的副作用,因为更改此符号链接会使/bin/bashget 用于系统脚本执行而不是/bin/dash. 。如果您愿意,您可以随时切换回原始链接安排。

Ubuntu 对其默认 shell 进行了一些定制:

-rwxr-xr-x 1 root root 801808 2010-08-10 15:58 bash
-rwxr-xr-x 1 root root 87984 2010-06-24 16:01 dash
lrwxrwxrwx 1 root root 4 2010-10-16 21:58 rbash -> bash
lrwxrwxrwx 1 root root 4 2010-10-16 21:58 sh -> dash
lrwxrwxrwx 1 root root 4 2010-10-16 21:58 sh.distrib -> bash
lrwxrwxrwx 1 root root 7 2010-10-16 21:58 static-sh -> busybox

无论如何,它只是一个符号链接。如果它破坏了某些东西,你需要将它改回来。

一些用户自 2007 年以来一直这样做,几乎没有遇到任何负面影响。我可能不会称之为疯狂。

答案2

差异似乎很明显:

  • 当你输入bash,执行bash
  • 当你输入时./myscript,它会执行sh(该#!线)。

如果脚本使用bash特定功能,则应该以#!/bin/bash(或可能#!/usr/bin/env bash) 开头。

相关内容