2012-08-25 58 views
1

我試圖在Ubuntu 12.04中運行CodeSourcery arm-2011.03.42 BASH腳本。在腳本的頂部是:Codesourcery arm-2011.03的Bash腳本找不到grep或sed

#! /usr/bin/env bash 

但是,當我執行它,我收到以下錯誤:

線140:grep的:沒有找到命令

線140:sed:command not found

我可以從命令行運行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和一些其他的東西,但我只是不能贏。我非常感謝你的幫助。

+1

嘗試'#!/ bin/bash' – Cfreak

+0

'#!/usr/bin/env bash'應該是'#!/ usr/bin/env bash'#之間沒有空格!和/ usr/bin/env – AntonioD

+0

@Cfreak嘗試過但它不起作用。 – Verax

回答

2

我在劇本

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

改變了這一行

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

,似乎現在的工作。

+1

也加上'/ usr/bin'。 'pushenvvar'函數中可能存在一個錯誤,這可以解決這個問題。 – Gilles

+2

教訓是,交互式shell中的$ PATH不一定與shell腳本中任何給定點中的$ PATH相同。 – dsh

0

shell腳本必須是bash,因爲sh中不存在數組。

請檢查您的PATH環境變量以及grep和sed/bin的路徑是否正常。

+0

我試過「sudo bash myscript.sh」,但我仍然收到「command not found」錯誤。我可以從命令行運行grep和sed,因此它們必須位於我的路徑中,並且必須具有正確的訪問權限。 – Verax

+2

「檢查你的PATH環境變量」:是的,但問題很明顯,腳本本身就會損壞它。 – Gilles

-1

可能有幾個可能的原因。

  1. 正如@AntonioD指出的那樣,'#!'之間一定不能有空格。和'/ usr/bin/env'在文件開頭。
  2. grepsed命令不存在於你的$ PATH,檢出你/bin/user/bin以查看它們是否存在,或在你的shell中運行which grepwhich sed
  3. 如果grepsed確實存在,您需要確保它們具有正確的訪問權限。它們應該是可訪問和可執行的,一般情況下不應該發生。
  4. 您不能使用#!/bin/sh而不是#!/usr/bin/evn#!/bin/bash,因爲這會導致shell在POSIX兼容模式下運行,其中大多數bash高級功能(如陣列)不起作用。

如果以上都不是這種情況,那麼它確實很奇怪。

+0

1.不起作用。 2,3。 grep和sed都可以從命令行運行,但不能在shell腳本中運行。 4.嘗試「sudo bash myscript.sh」,我仍然得到「命令未找到」錯誤。 – Verax

+2

這些都不會有幫助。 1是錯的,'#!'後的空格很好。 2和3是極不可能的,並且會導致系統無法啓動。 4錯了,'#!/usr/bin/env bash'(它最初的樣子)很好,並且不會導致bash在禁用數組的模式下運行。 – Gilles

+0

@Gilles我不確定你是否正確理解我的話。我承認我的錯誤是1,但2和3只是一個檢查,以確保所有的事情都是正確的,對系統無所作爲,你爲什麼會認爲它會打破系統?關於4,我不太清楚使用'#!/ bin/sh'會有什麼問題會使shell在POSIX兼容模式下運行? – weynhamz