2013-07-05 39 views
0

我現在面臨一個奇怪的,很奇怪的,行爲的進程名時,shell腳本文件的編碼是不同的進程名。編碼和

的方案是如下因素:

兩個文件 - caller.sh(ASCII文本) - executor.sh(UTF-8 Unicode文本)

# caller.sh 
#!/bin/bash 

/soft/executer.sh & 
sleep 60 

執行後「caller.sh &」,將‘PS’命令返回命名爲兩個過程‘caller.sh’:

PID TTY  TIME  CMD 
19566 pts/7 00:00:00 bash 
22699 pts/7 00:00:00 caller.sh 
22690 pts/7 00:00:00 caller.sh 
22694 pts/7 00:00:00 ps 

但是,如果改變了‘caller.sh’編碼到「諜影重重-再次shell腳本文本可執行文件」(在Windows盒子保存並轉移到Linux)的命令ps開始正確顯示:

PID TTY  TIME  CMD 
19566 pts/7 00:00:00 bash 
22689 pts/7 00:00:00 caller.sh 
22694 pts/7 00:00:00 ps 
22690 pts/7 00:00:00 executer.sh 

有人能解釋編碼和進程名/ bashs之間的關係?

p.s:dos2unix不能解決問題!

感謝

+2

它不是'!#/ bin/bash',而是'#!/ bin/bash' – devnull

+0

對不起,這是一個錯字 – RLM

+1

'executor.sh'如何接收比'caller.sh '如果它是從'caller.sh'中調用的?它看起來像22685是一個單獨運行的實例,而不是'caller.sh'實例的子進程。 – chepner

回答

0

我爲什麼發生的原因。其實並不是因爲編碼而是因爲評論腳本在bash解釋器之前。

# test script 
#!/bin/bash 
... 

我只是刪除它,一切都開始顯示OK:/

是否有人知道爲什麼會發生的原因是什麼?

+2

當系統Exec的一個文件,它會檢查文件的*前兩個*字節,看看他們是「#!」,如果他們是它使用作爲解釋器來運行該文件的腳本什麼如下。如果這些字符在文件後面,那麼它們根本就沒有用。 bash有一個備用模式,如果經常EXEC失敗(因爲它會在這種情況下),慶典運行它作爲一個bash腳本,並希望這至少接近,但它並沒有設置好一切相當正常... –

+0

請移步這個「回答」你的問題。你仍然在問一個問題。祝你們好運。 – shellter