Linux 點命令

原文地址:http://blog.sina.com.cn/s/blog_4c7fa77b01000ade.htmlhtml

「.」點命令是shell的一個內部命令,它從指定的shell 文件中讀入全部命令語句並在當前進程中執行。 所以當多個shell進程(父子進程或無關進程都可)共享一組變量值時,就能夠將這些變量賦值語句定義到一個shell文件裏,並在須要這些變量值的程序中使用點語句來引用這個shell文件,從而實現變量值共享(對這些變量值的修改僅涉及到這個shell文件)。但要注意的是,這個shell文件不能包括含有位置參數的語句,即不能接受$一、$2等命令行參數。(懶得自已敲了,上面拷貝自:http://cobra.blogdriver.com/cobra/202288.html)

從上面能夠看出,其實點命令至關於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

相關文章
相關標籤/搜索