2016-04-22 103 views
0

我對2個不同操作系統的shell腳本和進程表有一個普遍的疑問。跨不同Linux發行版的shell腳本行爲

在SuSE Linux系統上,我運行一個名爲joe.sh的腳本。這是一個簡單的腳本,執行以下操作


echo "Hello Joe "  
read x 

如果我做了ps -ef | grep [j]oe.sh -它會找到一個結果,這將是這個樣子


joe  15532 24267 0 09:40 pts/2 00:00:00 /bin/sh ./joe.sh 

這是假設我啓動另一個終端,不打e在劇本上。

但是,如果我做一個Oracle Linux系統上同樣的事情,我沒有得到任何比賽,直到我加入認領到腳本

#!/bin/bash 
echo "Hello Joe" 
read x 

有一些默認的環境在SuSE中,將被置?我想在Oracle Linux系統上覆制該行爲。

+0

你是什麼意思你不匹配?腳本是否立即運行並終止?它甚至不能正確執行?出於某種原因,您正在使用'sh'執行它(正如您可以在'ps'輸出行中看到的那樣)。無論如何,你通常都希望總是使用hashbang('#!')。 –

+0

ps -ef | grep [j] oe.sh不會返回任何結果(在oracle上)。腳本掛在進程表中,直到我輸入內容。我這樣設置,這樣我就可以打開另一個xterm窗口並以不同的方式搜索這個過程。我知道總是包含shebang是一種很好的做法,我只是好奇如果有人知道爲什麼suse默認會有/ bin/sh,而oracle不會。 – Joe

+0

oracle上的默認shell是什麼,它是否支持字符類例如'[stuff]'?)。 Bash的確如此。如果oracle上的默認shell沒有,那麼你有你的答案。 –

回答

0

我知道你在尋找的是:​​

不管怎麼說,腳本應該始終有一個家當線。 (I second John)

2

腳本應該總是有一個shebang線,除非他們打算是source d。 default shell in SuSE是Bash。將#!/bin/bash添加到頂部。

0

正如您在狀態行中看到的那樣,正在調用的默認shell是sh

喬15532個24267 0 9時40分./joe.sh

所以它與sh執行/ 2 00:00:00 /bin/sh的。

如上所示,默認情況下,SuSE中的shell應該是Bash。但是,這可以針對每個用戶進行不同的配置。任何用戶的默認shell(通常在基於UNIX的系統中)在/etc/passwd文件中定義。

該文件的每一行都是一個用戶,並且這些字段之間用:符號分開。第七個字段是默認的用戶shell(用戶登錄時執行的shell)。

更詳細的解釋,可以發現:http://www.cyberciti.biz/faq/understanding-etcpasswd-file-format/