看板Linux
标 题Re: [问题] 为什麽我写程式执行时一定要加上 ./
发信站SayYA 资讯站 (Mon Mar 26 13:05:59 2007)
转信站ptt!ctu-reader!news.nctu!SayYa
※ 引述《[email protected] (elfria)》之铭言:
> 满怪的...
> 比方说,我输出档案叫 a
> 那我要执行时一定要 ./a
> 这样才能跑
> 而打 a
> 反而会说找不到档@_@
提供这篇以前回应过的文章给你参考。
作者: kenduest (小州) 看板: Linux
标题: Re: 请问一个很笨的问题...
时间: Wed Aug 9 20:55:24 2000
※ 引述《[email protected] (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
1F:推 boombastick:推 03/26 13:39