2013-08-20 115 views
1

最近我被問了一個問題。執行shell腳本有哪些不同的方法,每種方法有什麼區別?運行shell腳本的不同方式之間的區別

我說,我們可以運行在下面的方法假設test.sh shell腳本是腳本的名稱,

  1. SH test.sh
  2. ./test.sh
  3. 。 ./test.sh

我不知道1 &的區別2.但通常在前2種方法中,執行時會產生新進程並運行相同的程序。而在最後一種方法中,它不會產生新的進程。相反它運行在同一個。

有人可以拋出更多的見解,並糾正我,如果我錯了嗎?

+0

[以./script.sh和./script.sh啓動腳本的區別。 ./script.sh](http://stackoverflow。com/questions/1880735 /啓動腳本之間的區別-sh腳本與腳本-sh) – devnull

+0

[./somescript.sh「和」之間的區別是什麼? ./somescript.sh"](http://stackoverflow.com/questions/2634219/what-is-the-difference-between-somescript-sh-and-somescript-sh) – devnull

+0

[運行shell腳本有什麼區別作爲./script.sh和sh script.sh](http://stackoverflow.com/questions/2468132/whats-the-difference-between-running-a-shell-script-as-script-sh-and-sh -script) – devnull

回答

7
sh test.sh 

告知使用sh執行test.sh該命令。

./test.sh 

指示執行腳本的命令。解釋器需要在第一行中定義,如#!/bin/sh#!/bin/bash。注意(thanks keltar),在這種情況下,文件test.sh需要執行此命令的用戶的執行權限。否則它不會被執行。

在這兩種情況下,所有使用的變量都將在腳本執行後過期。

. ./test.sh 

來源代碼。也就是說,它執行它,不管執行什麼,定義的變量等等,都會持續在會話中。

欲瞭解更多信息,可以檢查What is the difference between executing a bash script and sourcing a bash script?很好的答案:

的區別是:

  • 當你執行您打開一個外殼,類型的腳本 新shell中的命令,將輸出複製回當前的 shell,然後關閉新的shell。對環境的任何更改只會在新外殼中產生 的影響,並且在新外殼關閉時會丟失 。

  • 當你腳本你在你的 當前 shell中鍵入的命令。對環境的任何更改都會生效並保留在當前shell中。

+0

感謝您的迅速回復。感謝您澄清每種方法。 – Prabu

+0

只是一個簡短的評論 - 對於第二種選擇,您必須擁有文件系統權限才能執行此文件。對於其他人來說,這不是強制性的。 – keltar

+0

@keltar你是完全正確的。相應地更新了。謝謝! – fedorqui

相關問題