Re: [問題] 為什麼我寫程式執行時一定要加上 ./

看板Linux作者時間17年前 (2007/03/26 13:32), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/1
※ 引述《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
文章代碼(AID): #161rhO00 (Linux)
文章代碼(AID): #161rhO00 (Linux)