最近我被問了一個問題。執行shell腳本有哪些不同的方法,每種方法有什麼區別?運行shell腳本的不同方式之間的區別
我說,我們可以運行在下面的方法假設test.sh shell腳本是腳本的名稱,
- SH test.sh
- ./test.sh
- 。 ./test.sh
我不知道1 &的區別2.但通常在前2種方法中,執行時會產生新進程並運行相同的程序。而在最後一種方法中,它不會產生新的進程。相反它運行在同一個。
有人可以拋出更多的見解,並糾正我,如果我錯了嗎?
最近我被問了一個問題。執行shell腳本有哪些不同的方法,每種方法有什麼區別?運行shell腳本的不同方式之間的區別
我說,我們可以運行在下面的方法假設test.sh shell腳本是腳本的名稱,
我不知道1 &的區別2.但通常在前2種方法中,執行時會產生新進程並運行相同的程序。而在最後一種方法中,它不會產生新的進程。相反它運行在同一個。
有人可以拋出更多的見解,並糾正我,如果我錯了嗎?
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中。
[以./script.sh和./script.sh啓動腳本的區別。 ./script.sh](http://stackoverflow。com/questions/1880735 /啓動腳本之間的區別-sh腳本與腳本-sh) – devnull
[./somescript.sh「和」之間的區別是什麼? ./somescript.sh"](http://stackoverflow.com/questions/2634219/what-is-the-difference-between-somescript-sh-and-somescript-sh) – devnull
[運行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