尝试在精简的 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/bash
get 用于系统脚本执行而不是/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
) 开头。