2015-06-05 15 views
0

我發現做一個sh文件時,通常情況下,那麼我們編輯文件的可執行標誌有什麼區別.sh文件來更改可執行文件(chmod + x)而不是?

$ chmod +x <sth>.sh 

但是,如果沒有該可執行文件標記,sh文件可以可執行。

$ sh ./<sth>.sh 

爲什麼我們需要chmod?

祝您有美好的一天!

+0

可執行文件在UNIX中定義命令和命令名稱不應具有擴展名。你運行'ls',而不是'ls.elf',所以它應該同樣是'sth',而不是'sth.sh'。 –

+0

...無論如何,'sh sth.sh' **不會**執行腳本;它執行'sh',**讀取腳本,但不以任何操作系統關心的方式執行它(不執行'execv'-系列調用);因此不需要執行權限。 –

+0

@CharlesDuffy謝謝,我明白..但是,正確的是,我明白,chmod和執行具有廣泛的功能? – sjlee

回答

1

通過使用chmod並打開執行權限,你可以運行使用

<sth>.sh 

沒有可執行權限的文件,如果您已經閱讀權限,你仍然可以運行腳本,但你必須使用一個解釋,如shbash

當你

sh <sth>.sh 

這意味着運行sh命令,其中讀取 .sh文件,然後解釋它,因此您不需要執行權限。

+1

'sh'命令只適用於POSIX腳本。對於bash腳本,「bash」;對於ksh腳本'ksh'等,否則如果提供'sh'的解釋程序不提供腳本所需的功能,則會出現錯誤。 –

+1

(即使'/ bin/sh'由'bash'提供,它在兼容模式下運行,在運行時關閉許多非POSIX功能)。 –

+0

@bkmoney謝謝!,我不明白... unix系統對我來說太複雜了 – sjlee

1

當你不給文件的可執行權限時,你必須提及你想運行你的文件的二進制文件。

例如,你必須運行文件一樣

SH example.sh

但是當你給文件可執行權限允許您運行該文件./example.sh

+0

謝謝,祝你有美好的一天! – sjlee