1

我正在尝试在 Ubuntu 12.04 中运行 CodeSourcery arm-2011.03.42 BASH 脚本。脚本顶部是以下内容:

#! /usr/bin/env bash

但是,当我执行它时,我收到以下错误:

第 140 行:grep:找不到命令

第 140 行:sed:找不到命令

我可以从命令行运行 grep 和 sed,但不能在脚本中运行。

这是第 140 行的样子

env_var_list=$(export | \
    grep '^declare -x ' | \
    sed -e 's/^declare -x //' -e 's/=.*//')

如果我将第一行更改为

#!/bin/sh

我收到以下错误:

第 51 行:语法错误:“(”意外(预期为“}”)

这是第 51 行的样子

check_pipe() {
    local -a status=("${PIPESTATUS[@]}")  #<-- Line 51
    local limit=$1
    local ix

#<-- Line 51实际上并没有出现在 shell 脚本中。为了清楚起见,我只是将其添加到这篇文章中。

我尝试了 dos2unix 和其他一些东西,但我就是赢不了。非常感谢您的帮助。

4

3 回答 3

2

我在脚本中更改了这一行

pushenvvar PATH /usr/local/tools/gcc-4.3.3/bin

pushenvvar PATH /usr/local/tools/gcc-4.3.3/bin:/bin

它现在似乎工作了。

于 2012-08-25T13:00:13.257 回答
0

Shell 脚本必须是 bash,因为 sh 中不存在数组。

检查您的 PATH 环境变量,以及 grep 和 sed /bin 的路径。

于 2012-08-25T05:22:59.430 回答
-1

可能有几个可能的原因。

  1. 正如@AntonioD 指出的那样,'#!' 之间不能有任何空格 和文件开头的“/usr/bin/env”。
  2. grepand命令在您的sed$PATH 中不存在,检查您的/binand/user/bin以查看它们是否存在,或者在您的 shell 中运行which grepand 。which sed
  3. 如果grep并且sed确实存在,则需要确保它们具有正确的访问权限。它们应该是可访问和可执行的,一般来说,这种情况不应该发生。
  4. 您不能使用#!/bin/shinstead of#!/usr/bin/evn#!/bin/bash,因为这会导致 shell 在 POSIX 兼容模式下运行,在这种模式下,大多数 bash 高级功能(如数组)都不起作用。

如果以上都不是,那真的很奇怪。

于 2012-08-25T05:54:56.967 回答