linux script 用記事本等編輯過就無法 run 問題



贊助商連結


頁 : [1] 2

lych911
2007-08-29, 11:48 PM
想要請教大家一下, liunx shell script 經由網路芳鄰從 windows 系統用 記事本 或 wordpad 等編輯過後,linux 系統就無法執行該檔案,必須使用 dos2unix 指令轉換後才可執行,想請教是否有方法不需經過這道程序,在windows 從網路芳鄰編輯過後 linux 依然可以執行這個 shell script 呢?
有試過 Ultra Edit 編輯過,但是他會先儲存就的檔案,產生一個 .bak 的檔案,然後產生一個新的檔案,但是這個檔案卻又會變成沒有執行的權限,請各位指導建議,謝謝:lovely:

贊助商連結


mus000
2007-08-30, 12:27 AM
因為換行碼被記事本修改過了,變成 windows 用的換行碼。
所以必須再轉回 unix 格式的文字檔換行碼才行。
記事本跟 wordpad 是 M$ 的基本內建工具,所以只儲存 win 格式。

找找可以在儲存時不變動換行碼的,或是可以選擇儲存不同格式的。
像 ultraedit emedit。

ps: ultraedit 儲存備份檔 .bak 功能是可以關掉的。到設定功能 backup 裡改成no backup 就可。

lych911
2007-08-30, 09:43 AM
目前已經找了文字編輯軟體 Notepad++ 來取代 win 的記事本,這樣問題也就解決了,謝謝^^:)

琥珀
2007-08-30, 10:05 AM
換行格式不是微軟的專利,只是遊戲規則而已,所以大可不用 M$ 一詞。

反過來說,有許多文字檔,目標是給 Windows 用戶瀏覽,也沒有試著去轉換一下、補個附檔名,讓習慣圖形介面操作的用戶覺得不方便,甚至反感。是否應該將心比心,檢討一下,互相尊重彼此的差異,不要總是把問題都歸咎於作業系統、軟體公司。

mus000
2007-08-30, 01:32 PM
換行格式不是微軟的專利,只是遊戲規則而已,所以大可不用 M$ 一詞。

反過來說,有許多文字檔,目標是給 Windows 用戶瀏覽,也沒有試著去轉換一下、補個附檔名,讓習慣圖形介面操作的用戶覺得不方便,甚至反感。是否應該將心比心,檢討一下,互相尊重彼此的差異,不要總是把問題都歸咎於作業系統、軟體公司。

請問一下,那一句話符合你上面所說的『不要總是把問題都歸咎於作業系統、軟體公司。』?

請明示一下?

linux_xp
2007-08-31, 12:36 AM
覺得 Madedit 比 Notepad++ 好用,也是免費的
特點是有直接轉碼功能,可把 BIG-5 轉成 UTF-8,簡體轉繁體


那是「換行格式」的問題

unix 換行是插入一個 LF (換行)的標記
這個標記在文字檔中不會看到,因為編輯器會自動忽略
但用二進制去看即可看到

M$ 的換行,除了 LF,還會插入一個 Return (回車)的標記
意思是模擬打字機換行後,拉「拉桿」把文件回到起始
也就是總共會插入兩個標記

Return 標記在 unix 系統中
因為編輯器不會自動忽略,會被視為亂碼

同樣的,unix 換行的文字檔
拿到 windows 底下開啟,會全部擠在一行
原因是少了 Return 的標記


如果以「邏輯性」和「方便性」來說
多插一個 Return 標記是比較沒道理
因為換行後,就是要回到起點
沒必要再多一個標記,告訴編輯器要回到起點
這樣只會多浪費存儲的資料量

想必 M$ 也不想維持這個傳統
但因為是從 DOS 時代就有了,為了相容只好一錯再錯
這算是 M$ 的一個歷史包袱

琥珀
2007-08-31, 02:34 PM
以組合語言的角度來看,內部本身就是 Line Feed (餵一行) 和 Carriage Return (返回游標)。

自己也不能期望改變大局。MAC/UNIX/DOS 都弄一套規則,一般的用戶怎能承受這些區別?

要改變 DOS 和 Windows 的 0D0A 定律,現行幾乎是不可能的,除非現有的累積成果拋棄掉,重新定義一次。目標是給何種系統使用,去遵守規則就是了。現在還要去爭這個換行定義的不同,有些不合時宜。

曾經收到不少 .inf/.reg/.txt 檔案,都是 unix 換行格式,不過 win 內部還是會默默接受,不會不准執行。每次碰到「一行文字檔」,直覺反應就是用瀏覽器開啟,或是用第三方的記事本。

关于"回车"(carriage return)和"换行"(line feed) (http://www.ieee.org.cn/dispbbs.asp?boardID=61&ID=50588)

linux_xp
2007-08-31, 09:12 PM
just 討論「原理」和「電腦歷史」而已,沒別的意思

我桌上型用 XP,伺服器用 Linux
所以這種現象早習慣了,並不會覺得困擾

說穿了,這只不過是一個跨平台必要的常識
不清楚原理,就像樓主會奇怪為甚麼記事本編輯後會這樣子
原理通了,也就見怪不怪了
每個人都是這樣走過來的,這部份都學習過、也困擾過
沒有人天生就是知道這種知識的,都是聽別人說了才知道
從網路得到人的幫助,然後又去幫助別人,合情合理

要說明這個問題的真正原因,肯定是要解釋何謂「換行格式」
如此才能通「原理」,解答才有意義
而不只是換個編輯器,就能解決問題這麼簡單

因為就算使用較專業的編輯器,開了 LF-CR 換行的 shell script
若不轉成 unix 格式,它還是一樣不能執行的!

唯有真正瞭解它的原因、原理
編輯時才會注意到格式問題,也才不會發生不能執行的錯誤
這才算一個完美的解答

換行格式,是 windows / unix 跨平台的使用者
必要知道的一個知識,知道了,才能工作
絕沒有去批評 OS 誰是誰非的意思


若要再深入討論:
shell script 為何會那麼在乎換行符號?

個人認為原因有二:
-----------------------------
1.
shell script 並沒有結尾符號的設計
例如 php、java...等程式語言,是以 ; 分號來判斷結尾
但 shell script 一般並不需結尾符號,它是以換行標記來判斷結尾的

2.
shell script 裡面很多指令(關鍵字),實際上就是系統指令
如果多出一個 ^M,shell 就認不出那是什麼指令,或是什麼檔案
即是會回應:指令不存在、檔案不存在,然後執行錯誤


題外話:

當然期望 M$ 或 unix-like 誰去改變,都是多餘的,各有各的立場

如果 M$ 會改變,也就不會有 .doc 這東西,也就不會有 IE only
它市佔率是高沒錯,但終究是封閉、壟斷的格式,這是不可否認的事實

開放的格式,是任何人都可以使用
而封閉,甚至專利的格式,用了可是會被告的
這是它們最大的不同點

$ 這個符號,只說明要"錢",除此之外,貌似也沒別的意思
個人認為將其擴大解釋成有鄙視的味道,是太過度敏感了
也許網路上提到這個詞的人
往往只是因為花太多錢在上面,表達一下不滿而已
就好比口渴去投個販賣機,結果硬幣被吃掉
難道一般人不會踢一下,說:這吃錢的鬼
這是合情合理的情緒表現吧

mus000
2007-08-31, 11:05 PM
以組合語言的角度來看,內部本身就是 Line Feed (餵一行) 和 Carriage Return (返回游標)。

自己也不能期望改變大局。MAC/UNIX/DOS 都弄一套規則,一般的用戶怎能承受這些區別?

要改變 DOS 和 Windows 的 0D0A 定律,現行幾乎是不可能的,除非現有的累積成果拋棄掉,重新定義一次。目標是給何種系統使用,去遵守規則就是了。現在還要去爭這個換行定義的不同,有些不合時宜。

曾經收到不少 .inf/.reg/.txt 檔案,都是 unix 換行格式,不過 win 內部還是會默默接受,不會不准執行。每次碰到「一行文字檔」,直覺反應就是用瀏覽器開啟,或是用第三方的記事本。

关于"回车"(carriage return)和"换行"(line feed) (http://www.ieee.org.cn/dispbbs.asp?boardID=61&ID=50588)


所以你的重點是什麼呢? 你的回答有助於樓主解決他的問題嗎?
看你的文章數那麼高。沒想到回文的內容都是一些跟原問題無關的內容。
這種回文方式讓你很高興嗎?

你真的有看懂樓主所碰到的問題跟要解決的問題嗎?

誰管你用哪種格式的換行碼? 重點是問題怎麼解決?

你回了那了些文,是在放什麼馬後炮?

要是你想討論『換行碼的問題』,你為什麼不另外再開一個討論頁去討論?
回在別人『已經解決的問題』後面是在做什麼?

warzero
2007-08-31, 11:20 PM
題外話:

當然期望 M$ 或 unix-like 誰去改變,都是多餘的,各有各的立場

如果 M$ 會改變,也就不會有 .doc 這東西,也就不會有 IE only
它市佔率是高沒錯,但終究是封閉、壟斷的格式,這是不可否認的事實

開放的格式,是任何人都可以使用
而封閉,甚至專利的格式,用了可是會被告的
這是它們最大的不同點

$ 這個符號,只說明要"錢",除此之外,貌似也沒別的意思
個人認為將其擴大解釋成有鄙視的味道,是太過度敏感了
也許網路上提到這個詞的人
往往只是因為花太多錢在上面,表達一下不滿而已
就好比口渴去投個販賣機,結果硬幣被吃掉
難道一般人不會踢一下,說:這吃錢的鬼
這是合情合理的情緒表現吧
抱歉,離題一下,只是個人意見,並無意想要開戰的意思。
或許就如 Linux_XP 兄所說,有些人只是發洩下而刻意說出 "M$" 。

但在個人觀點來說,明明有一個正式的名稱 微軟、Microsoft 不用,刻意用那樣的外號。
這很明顯不尊重對方的意思。就好像一個人有好好的名字,卻被一些人胡亂取了個外號的情況一樣。
或許是開玩笑也好,都讓人覺得很不尊重對方的意思。

如果是個人用 "M$" 本來就沒有什麼意見,不過擔心用久後就會成為流行。
或許有一天還會誤導新人們以為 "M$" 就是 Microsoft。
更何況現在這樣的情況已經確實發生了,有一個正式的官方網站,卻用上了 "M$" 來稱呼微軟。如果用上 "MS" 我到還覺得無所謂。
這就顯得那些官方網站很不專業。

他們這樣用的真正理由就不懂。
或許想要刻意來卑視?想要來發洩他們對微軟不滿? 還是因為被影響到認為 "M$" 就是 Microsoft 的標誌?
雖然他們的名譽變成怎樣對我來說都無所謂...
不管什麼原因都好,都只會讓人們都覺得很搞笑。

其實大概大部分的人都不會以中立的觀點去看待一種事物。
就像有部分的所謂微軟派只認為微軟好,Linux 派只認為 Linux、Unix-Like 好。
互相找出痛處來批評、比較誰的優勢好。只有這點是讓人覺得最討厭的地方。

如果是真正喜歡玩電腦的用家,其實根本不必去考慮這些。
能用的就用、能玩就玩、能研究的就一起研究、討論就好。爭奪什麼的本來就毫無意義。自己是覺得這樣才可以好好享受到玩電腦的樂趣。