2012-08-17 37 views
2

我想在CentOS中編寫一個測試各種回聲轉義序列的bash腳本。然而,當我運行程序Bash回聲轉義序列

./test.sh一個

我不斷收到此錯誤信息:

不好解釋:沒有這樣的文件或目錄

這裏是腳本:

#! /bin/bash 

# Test echo escape sequences 

input=$1 

case $input in 
    a) echo -e "\a" testing \a;; 
    b) echo -e "\b" testing \b;; 
    c) echo -e "\c" testing \c;; 
    *) echo Incorrect input 
    exit 1;; 
esac 

我哪裏出錯了?

編輯:我在Windows XP主機上運行CentOS的最小客人在VirtualBox中

編輯2:

#! bin/bash 

是在我的劇本,不

#! /bin/bash 

當我改變它到

#! /bin/bash 

並運行./test.sh一個,它只是打印「一個」

+1

運行它通過'dos2unix' – 2012-08-17 01:36:43

+0

爲什麼會OP做到這一點? – 2012-08-17 01:37:11

+1

@AdrianCornish:我懷疑它找不到'bash',因爲它沒有安裝(不太可能),也沒有安裝在'bin'中(再次不是很可能),或者它被保存在Windows行結尾,所以它找不到'/ bin/bash^M'(之前我有這個問題)。 – 2012-08-17 01:43:26

回答

4

[編輯]基於原始訊息,這通常是由DOS LINE引起結局。

解釋器將CR/LF DOS行結尾中的CR視爲應該用於執行腳本的shell的一部分。

因此,它會嘗試加載不存在的/ bin/bash(CR),因此會顯示「bad interpreter」。

一個簡單的方法來糾正這是對腳本的內容複製到剪貼板,然後:

貓> test.sh (粘貼剪貼板) (按Enter鍵) (按Ctrl-d)

這將刪除任何不正確的行尾(還有其他方法可以做到這一點,但這是一個非常簡單/直接的解決方案。


一旦「不好解釋」的問題得到了解決,在腳本中的另一個語法錯誤是使用「\ A」的時候,你可能打算「\」上。


[編輯]我想我明白你的意思了。試試這個:

回聲-e「\一個」測試「\\」一

+1

Just FYI我確實通過創建一個DOS行結尾的文件來確認這一點,試圖在MacOS X中運行時會給出類似的(但稍微不同的)錯誤比在原始文章中顯示的要多。 – user700390 2012-08-17 01:46:49

+1

我其實已經#! bin/bash在我的腳本中,而不是#!/bin/bash – Anthony 2012-08-17 01:56:07

+0

我根據您的反饋更新了我的答案。爲什麼帖子中的腳本與系統中的腳本不同?有沒有其他差異? – user700390 2012-08-17 04:16:08

2

你使腳本可執行的東西,如

chmod 755 test.sh 

新增

程序不知的一部分問題在於您使用的轉義序列,因爲它們可能意味着\ a =光標向上\ b =光標向下\ c =向前遊標。

或者也解釋爲\ A =標題的SOH開始\ B = STX文本開始或文本的\ C = ETX結束

+0

+1是的,我跑了chmod + x test.sh – Anthony 2012-08-17 01:35:13

+1

你的腳本適合我。你期望什麼轉義序列? – 2012-08-17 01:36:13

+0

我試過a,b和c是這樣的:./test.sh a – Anthony 2012-08-17 01:37:21