sh 與 ./ - Linux

John avatar
By John
at 2011-08-30T03:59

Table of Contents

※ 引述《chan15 (ChaN)》之銘言:
: 如果自行抓取檔案回來 make install
: 通常有一個動作是要 ./configure
: 我朋友跟我說這樣等同於 sh configure
: 為什麼一般的 tutorial 都要用 ./ 呢?
: 有什麼差別嗎?

. 代表「當下目錄」
所以 ./configure 代表執行當下目錄中的 configure 這個檔案

sh 是一個 shell 程式
所以 sh configure 代表以 sh 執行 configure 這個檔案

對於後者(sh [file])而言, 後面的 [file] 必須是一個 shell script
Shell script 就是一堆文字, 裡面記載者你希望它被解譯時會發生什麼事情
sh 程式負責解譯該 script 的內容, 產生相對應的行為

前者則是執行一個程式的語法
如同 sh [file] 語法中的 sh 一樣, 在這個語法中 configure 被視為一個可執行檔
在 Linux 裡, 只要被標示為可執行檔, 即使是文字檔也可以直接當程式來跑
所以在這個狀況中, 雖然 configure 本身只是一堆文字, 但也會被執行
Linux 會自動判讀(也可以明文指定)該檔案的內容, 以適當的方式執行它
在這個例子中, 當你執行 configure 時, Linux 就會自動呼叫 sh
因此得到的結果就會和 sh configure 一樣

那麼為什麼要寫出 ./ 呢?
這是因為由於方便起見, shell 程式會自動在你輸入執行檔時搜尋該檔案位置
這樣你就不用每次都明文指定該執行檔的位置, 而只要打執行檔名稱就好了
例如大家都很常用的 ls, 就是被放在 /bin/ls 這個位置
但是不用每次打 /bin/ls 才能使用, 只要打 ls, shell 會負責幫你找到正確位置
Shell 尋找正確位置的依據則是你的 PATH 環境變數
如果你輸入 echo $PATH 就可以看到你的系統上這個環境變數的值
這個變數中列出所有 shell 用來找執行檔位置的路徑, 其間以冒號分隔
可以看到其中有個路徑是 /bin, 所以當你輸入 ls, shell 就可以找到 /bin/ls

可是你也可以看到, 這些路徑中並沒有包含 .(你目前所處的目錄)
所以如果你只輸入 configure, shell 會到處去找這個程式...然後找不到
因此, 當你想把 configre 直接視為執行檔執行時
必須明確指明你想執行「這個目錄下的 configure 檔」
亦即輸入 ./configure

所以其實這兩個指令代表的意思不太一樣
也不能說 sh 和 ./ 有對等關係
只是剛好在這個例子中, 兩個指令的效果相同而已

順帶一題, 如果你想瞭解如何把一個普通檔案變成可執行的檔案
則可以參考鳥哥的檔案權限教學
http://linux.vbird.org/linux_basic/0210filepermission.php


--


"問おう、貴方が私のマスターか?"

--
Tags: Linux

All Comments

Ula avatar
By Ula
at 2011-08-30T14:16
很清楚

stack size settings

Catherine avatar
By Catherine
at 2011-08-30T00:01
最近因為有用到軟體需要指定stack size=unlimited Server是使用CentOS 5.6 我個人採用的方式是在~/.bash_profile (個人的設定檔) 中加上 and#34;ulimit -s unlimitedand#34; 而我用這個方法之後 以and#34;ulimit -a ...

Aaron Seigo談論KDE SC 5.0-1

Yedda avatar
By Yedda
at 2011-08-29T21:09
這篇文章是derStandard.at對Aaron Seigo所做的專訪,談到KDE Frameworks 5.0、 Applications、Workspace 與 Plasma active未來的發展 derStandard.at:你剛才宣布KDE Frameworks 5.0。背後有什麼想法嗎? ...

請問有軟體可以解析用Linux儲存的中文檔案嗎

Mary avatar
By Mary
at 2011-08-29T16:38
如題 我們實驗室原本有使用一個Q NAP公司的FTP(TS-201) 不幸的,最近壞掉了 我們嘗試將裡面的檔案救出來 但是聯絡原廠才知道硬碟資料是用Linux格式儲存的 我有下載R-Linux嘗試拉出裡面的檔案 但路徑跟名稱有中文的全變亂碼了 不知道有沒有其他辦法可以救他 -- 不 ...

關於header file的位置

Jake avatar
By Jake
at 2011-08-29T15:48
各位板友好 小弟是使用Ubuntu 10.04 目前因為要安裝某一個軟體 但必須要事前安裝 Motif library sudo apt-get install libmotif-dev 安裝完之後 下./configure之後發現找不到Motif的header file checking Xm/ ...

Linux 3.1-rc4 is out.

Edith avatar
By Edith
at 2011-08-29T13:27
Linus Torvalds - 下午1:00 - 公開 Linux 3.1-rc4 is out. Most noticeable thing for most users is likely the lack of warnings about duplicate sysfs files for ...