Re: [問題] 為什麼我寫程式執行時一定要加上 ./
※ 引述《elfria.bbs@ptt.cc (elfria)》之銘言:
> 滿怪的...
> 比方說,我輸出檔案叫 a
> 那我要執行時一定要 ./a
> 這樣才能跑
> 而打 a
> 反而會說找不到檔@_@
提供這篇以前回應過的文章給你參考。
作者: kenduest (小州) 看板: Linux
標題: Re: 請問一個很笨的問題...
時間: Wed Aug 9 20:55:24 2000
※ 引述《letgo.bbs@bbs.ntu.edu.tw (LetGo)》之銘言:
> 不好意思 想請問一個蠻笨的問題..
> 就是在目前的工作目錄下 run程式時 (例如 abc.elf)
> 為何有時要加上 ./abc.elf 來告訴os是在目前目錄
> 有時又不用? (直接打abc.elf)
> 謝謝各位的回答!!
先來個基本觀念:
比方當你執行 a.out 時,系統會去 PATH 環境變數內的路徑找找是否有 a.out
這個檔案。若是有的話就執行它。找不到的話,就出現 command not found
的訊息。
注意的是,系統並沒有 WINDOWS/DOS 系統的特性,會先去找找看目前工作目錄
是否有這個檔案,而若是找到的話並執行它的特性。
所以說,請使用絕對路徑,或者是 ./a.out 告知要執行目前工作目錄內的
a.out 檔案。
OK... 我執行 set | grep "PATH" 得到我目前的 PATH 環境變數為:
PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/kenduest/bin
而若是我目前工作目錄是在 /tmp 目錄內,該目錄內有個 hello 的執行
檔案。當我鍵入 hello 的話,那會出現 command not found 的錯誤訊息,
因為 hello 這個執行檔案所在目錄並沒有在 PATH 環境變數設定的路徑內。
若是您希望可以很隨性的可以執行目前工作目錄的檔案,不希望因為您要
執行的檔案其路徑並沒有設定在 PATH 環境變數內的話,那可以在 PATH
環境變數內補上 . 的路徑,像是這樣子:
PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/kenduest/bin:.
那以使用 bash 當 shell 程式的使用者,可以在 .bash_profile 檔案內
加入: export PATH=$PATH:. 如此就可以滿足您的需求.....
不過試問一下,您會不會問到為何不預設把 . 加入到 PATH 環境變數內呢....
其實這是基於 "安全性" 的考量。
比方你把 . 路徑加入到 PATH 環境變數內,而有個人在 /tmp 目錄下建立一個
shell script 檔案叫做 la ,內容如下:
#!/bin/sh
rm -rf ~
有的人打字很快,很有可能不小心在 /tmp 目錄下鍵入 ls 誤打為
la ,你想想看,會發生啥事情.... 自己家整個目錄都被自己砍了 @_@
所以說,為了避免誤執行到他人的木馬程式, . 這個符號還是不要
擺在 PATH 環境變數內.... 再來就是,真的要把 . 加入到 PATH,
請放置於 PATH 後段,而不要在前段。
export .:$PATH 這個方式極危險,只要隨便有個人在 /tmp 目錄下放個
上面的 shell script,檔名為 ls ,那在 /tmp 下達 ls 就......
--
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
現代人普遍的現象: 「小學而大遺」、「捨本而逐末」
「以偏而概全」、「因噎而廢食」
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
--
※ Origin: SayYA 資訊站 <bbs.sayya.org>
◆ From: kendlee.sayya.org
推
03/26 13:39, , 1F
03/26 13:39, 1F
Linux 近期熱門文章
23
129
PTT數位生活區 即時熱門文章