轉自:http://share.blog.51cto.com/278008/583382
我寫了一個非常簡單的指令碼,用於上傳某個檔案到hadoop中hdfs的某個目錄。在輸入檔案名稱或目錄名稱時,有時候會輸錯,需要刪除錯誤輸入,但在敲退格鍵時時出現亂碼^H,每按一下退格鍵就會出現一個^H。
搜尋網上資料,參考了如下網頁,得到解決辦法:http://hi.baidu.com/moonlight_bupt/blog/item/1b6a7acc5435c00700e928df.html,它提供了兩個方法:
一是,在敲退格鍵時,同時按住ctrl鍵;
二是,修改.bash_profile檔案:
a)在bash下:$ stty erase ^?
或者把 stty erase ^? 添加到.bash_profile中。
b) 在csh下:$ stty erase ^H
或者把 stty erase ^H 添加到.cshrc中。
stty erase "^H"
我兩個方法都實驗了一下,第一個方法沒有問題,但在實驗第二個方法時,出了問題,如下:
我的預設shell是bash,指令碼中調用的也是bash。我在.bash_profile中寫入$ stty erase ^?,但根本沒有效果!
於是寫入stty erase "^H",這才有效果
。
後來仔細觀察了一下,我在bash中敲退格鍵時出現^H,而這個字元應該是csh中出現的東西!不知道這個詭異的現象是怎麼來的。 附指令碼:
#!/bin/bash #2011-06-07 by qinshan.li#echo -n "Type your path: " read path ~/hadoop-0.20.2-CDH3B4/bin/hadoop fs -mkdir ${path} if [[ "$?" = "0" ]]; then echo -e "$(date "+%T") : Create directory successfully! " else echo -e "$(date "+%T") : Create directory failed! " fi echo -n "Type your file to upload: " read file ~/hadoop-0.20.2-CDH3B4/bin/hadoop fs -moveFromLocal ${file} ${path} if [[ "$?" = "0" ]]; then echo -e "$(date "+%T") : Uploaded successfully! " else echo -e "$(date "+%T") : Uploaded failed! " fi