2011-04-12 97 views
4

我寫了一個bash腳本。它基於輸入參數獲取三條路徑,然後獲取路徑中的圖像名稱/文件名。在bash腳本中找不到命令錯誤

喜歡的東西:
我提供:

AA=/home/user 

然後,它使用find命令來獲得
/home/user/dir2/images/dir/tellmeimage1fun.bin

最後我有獲取tellmeimage1fun.bin作爲輸出。

腳本:

#!/bin/bash 

echo "arg0 n/k/d" 

AA=$1 
CC=$3 

PATH1="`find $AA/dir2/images/dir/ -name *image1*.bin`" 
PATH2="`find $AA/dir2/images/dir/ -name *bimage2*.bin`" 
PATH3="`find $AA/dir2/images/dir/ -name *cimage3*.bin`" 

if [ $CC = "n" ] ; then 
    PATH=$PATH1 
elif [ $CC = "k" ] ; then 
    PATH=$PATH2 
else 
    PATH=$PATH3 
fi 

#Getting filename name from path: 
IMG="`ls $PATH | cut -d "/" -f6`" 

OUTPUT: 
/users/prasapat/bin/sl5: line 22: ls: command not found 
/users/prasapat/bin/sl5: line 22: cut: command not found 

如果我給LS完整路徑和削減他們的工作。但我不想爲腳本中的所有命令執行此操作。如果我刪除最後一行並回顯PATH變量,那就完全沒問題。只有在添加最後的命令後,我纔看到這個問題。
請幫助,讓我知道我是否做過任何明顯的錯誤。

回答

10

問題是,如果在調用時沒有使用完整路徑,則您正在重新定義bash查找的PATH變量以找到二進制文件。

您應該將bash腳本中的PATH更改爲MYPATH或類似的東西,這樣它就不會混淆已經存在的環境變量。

如果你不知道PATH變量是什麼,你可以看看wikipedia's article

+0

非常感謝!這樣一個愚蠢的錯誤! – Pkp 2011-04-12 23:55:54

1

$PATH是一個預定義變量賦予的目錄信息中查找可執行文件時。爲你的腳本選擇一個不同的變量名稱,你會沒事的。

0

使用與PATH不同的變量名稱。 $PATH是環境變量,它告訴您的shell在哪裏查找可執行文件(例如,您可以運行ls而不是/bin/ls)。

0

您正在使用PATH,它是特殊的,用於查找命令,這就是爲什麼ls無法解析的原因。使用比PATH

if [ $CC = "n" ] ; then 
    MY_PATH=$PATH1 
elif [ $CC = "k" ] ; then 
    MY_PATH=$PATH2 
else 
    MY_PATH=$PATH3 
fi 

export MY_PATH 

IMG="`ls $MY_PATH | cut -d "/" -f6`" 
2

其他任何名義$PATH變量是包含目錄,在那裏你的shell(在這種情況下,bash)的應該看看當你輸入一個命令(如find和列表的特殊的環境變量ls)剛剛嘗試在腳本或者在外殼echo $PATH得到的是什麼樣子的感覺(你通常會有/bin/usr/bin/usr/local/bin列出,也許更多。)

正如你並不真的需要在這個特定的腳本中重新定義這個變量,你應該使用除$PATH以外的其他名稱。

0

我有這個問題,事實證明使用記事本+ +編輯bash腳本是添加DOS行結尾,而不是UNIX行尾。在Linux環境中運行該腳本會導致引發'找不到命令'錯誤。

管理運行我的腳本,像這樣來診斷問題:

bash -x testscript.sh 

這將轉儲任何編譯器輸出。獲取引發的錯誤信息是:

bash -x testscript.sh 
+ $'\r' 
: command not found 2: 
'estscript.sh: line 3: syntax error near unexpected token `{ 

我通過改變行結尾的格式在記事本+ +是UNIX不是DOS解決了該問題由去編輯 - > EOL轉換 - > UNIX。