原文地址:http://blog.sina.com.cn/s/blog_4c7fa77b01000ade.htmlhtml
「.」點命令是shell的一個內部命令,它從指定的shell
從上面能夠看出,其實點命令至關於c語言裏面的#include。另,點命令還有另外一個寫法:source。下面咱們將舉例來講明。
咱們先寫一個簡單的shell腳本文件,暫且命名爲file1吧:
#! /bin/bash
a="hi"
echo $a
咱們先來執行一下這個shell腳本,打開終端,敲入:
./file1
結果是什麼,你應該也看到了吧:
bash: ./file1: Permission denied
爲何呢。咱們先無論這個吧,先看一下,另外一個結果:
. ./file1(注意啊,兩個點之間有個空格的哦,要不就成了上一級目錄了,若是你不嫌麻煩的話,也能夠寫source ./file1)
這個的結果呢,跟前面就不同了,正如咱們所願的,輸出了hi。
試比較這兩個執行使命吧:
./file1,直接執行,須要另起shell進程,而你彷佛尚未這個權限(這個改一下就OK了,後面再說),而用點命令就不同了(注意啊,./file這裏的點可不是點命令裏的點啊,我就被這個問題困擾了好久,汗死,居然忘了點還有當前目錄的意思,你們b4我吧),點命令會在當前的shell下執行。
補充說一下怎麼改一下file1的權限,讓咱們能夠在按shell腳原本執行:
chmod +x file1
再執行一下./file1,是否是OK了?
再來看另外一個例子吧。
首先腳本文件file1
#! /bin/bash
a="hi"
腳本文件file2(與file1在同一個目錄下)
#! /bin/bash
./file1
echo $a
記得改一下file1的權限啊,要不./file1就無法執行了。執行一下看看結果。
什麼都沒有,是吧。咱們再改一下file2,這回用一下我們的點命令
#! /bin/bash
. ./file1
echo $a
怎麼樣結果不同了吧。(原諒我實在太懶了,只能舉這麼簡短的例子了,呵呵)
這個例子應該仍是能說明點問題的吧。若是不用點命令的話,會另起shell進程,而啓動這個進行的時候,它會創建本身的進程環境(暫且這麼叫它吧),而後在這個進行結束的時候,它所創建的環境也隨之被銷燬。並且點命令就不同了,它會把點命令所帶的shell腳本里的因此內容帶到當前的shell進程裏,在本程序裏,就是變量a了。
廢話了這麼多,其實好像把點命令想像成C裏的#include就OK了,呵呵。不過通過這麼折騰,仍是學到了一點東西的,至少知道了.不只有點命令的做用,更有當前目錄的意思(冷啊,該補一下linux基礎了)。linux