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シェルスクリプトには表示されません。わかりやすくするために、この投稿に追加しました。

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

sh には配列が存在しないため、シェル スクリプトは bash である必要があります。

PATH 環境変数、および grep と sed /bin のパスを正常に確認します。

于 2012-08-25T05:22:59.430 に答える
-1

いくつかの理由が考えられます。

  1. @AntonioD が指摘したように、「#!」の間にスペースを入れてはなりません。ファイルの先頭にある「/usr/bin/env」。
  2. grepandsedコマンドが $PATH に存在しない場合は、and をチェックアウトし/binて存在するかどうかを確認するか、andをシェルで/user/bin実行which grepしてください。which sed
  3. grepとが実際に存在する場合sedは、それらに適切なアクセス権があることを確認する必要があります。それらはアクセス可能で実行可能である必要があります。一般に、これは発生しないはずです。
  4. または#!/bin/shの代わりに使用しないでください。配列などの bash の高度な機能のほとんどが機能しない POSIX 互換モードでシェルが実行されるためです。#!/usr/bin/evn#!/bin/bash

上記のすべてが当てはまらない場合、それは本当に奇妙です。

于 2012-08-25T05:54:56.967 に答える