详谈为何不要使用Windows的notepad编写shell
2019獨角獸企業(yè)重金招聘Python工程師標準>>>
初學shell的時候,總聽到群里的大牛說不要使用Windows自帶的notepad編寫shell。然而,一直不解其中的原因。接下來,咱們動手實踐一下,了解其中的來龍去脈。
在Windows下,打開notepad,敲打以下代碼:
#! /bin/bash echo "This is the first line \ of the script." echo "This is the second line \ of the script." 保存為test1。然后將這個文件復制到Linux下。打開這個文件,會看到文件的內(nèi)容與之前在Windows下編輯的文本文件并無區(qū)別。在Linux下,使用vi編輯test2文件,加入同樣的內(nèi)容,然后保存。
接下來,分別運行這兩個文件(注意:運行前先賦予這兩個文件以可執(zhí)行權(quán)限)。對于test2,得到如下輸出:
$ ./test2 This is the first line of the script. This is the second line of the script. 對于test1,則得到這樣的輸出: $ ./test1 bash: ./test1: /bin/bash^M: bad interpreter: No such file or directory 也就是說,在Windows下用notepad編寫的shell運行出錯了。從報錯信息可以看出,從header這一行就已經(jīng)出錯了,header這一行本來是要告訴我們的內(nèi)核使用Bash這個命令解釋器,它的路徑位于/bin/bash。可是bash卻告訴我們無此文件。究其原因,是^M這個字符影響了header一行對于命令解釋器的正常識別。那^M這個字符又是什么呢?不用的操作系統(tǒng)使用不同的字符來表示換行。Unix/Linux使用單個的換行(Line Feed,LF)符作為換行的標記。Windows/DOS使用2個字符:回車(Carriage Return,CR)符和換行符(LF)。MacOS使用CR。^M即為我們在使用Windows的notepad產(chǎn)生的回車符。更多信息可參見維基百科上關(guān)于Newline的解釋:http://zh.wikipedia.org/wiki/%E6%8F%9B%E8%A1%8C
對于Linux Deepin甚至其他發(fā)行版本來說,一個比較通用的方法是使用tr工具來刪除多余的回車符,因為它不需要安裝額外的工具,且便于理解。
tr -d '\r' < test1 > tmp && mv tmp test2 使用這條命令刪除多余的回車符后,該腳本即可正常運行。tr是translate或transliterate的縮寫。tr工具從其標準輸入(stdin)中轉(zhuǎn)換、縮減或刪除字符,并寫道標準輸出(stdout)。其基本句法為: tr [options] set1 [set2] 在這里,tr從文件test1中讀入,將其中的回車符(\r)刪除后輸出為文件tmp,然后又將文件tmp重命名為test2。對于tr的更多用法,可查看其man page。轉(zhuǎn)載于:https://my.oschina.net/ckanner/blog/91887
總結(jié)
以上是生活随笔為你收集整理的详谈为何不要使用Windows的notepad编写shell的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Web Services 详解
- 下一篇: CMD-NET命令详解、NET命令大全(