V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
CivAx
V2EX  ›  程序员

你们习惯在 Linux 下输路径的时候带 ./ 吗

  •  
  •   CivAx · 2019-12-10 17:37:26 +08:00 · 4005 次点击
    这是一个创建于 973 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如 cd usr/ 和 cd ./usr/

    或者 bash myScript 和 ./myScript

    47 条回复    2019-12-11 15:51:06 +08:00
    lxk11153
        1
    lxk11153  
       2019-12-10 17:43:53 +08:00
    有时写,有时不写,(我也不知道有木有区别
    感觉这个和一些编程语言写不写语句末尾;有得一比 (我是写的,因为刚接触时就写了,养成习惯了不写看着不完成)
    yeyu123
        2
    yeyu123  
       2019-12-10 17:48:55 +08:00
    没这习惯
    当前目录不会写
    murphyyyy
        3
    murphyyyy  
       2019-12-10 17:50:49 +08:00
    是的.习惯...
    因为 windows 上的历史遗留问题....执行 exe 时必须输入./xxx
    garlics
        4
    garlics  
       2019-12-10 17:55:10 +08:00
    只有执行 shell 的时候会写
    uxstone
        5
    uxstone  
       2019-12-10 17:55:33 +08:00   ❤️ 3
    rm -rf *
    rm -rf ./*
    flyingghost
        6
    flyingghost  
       2019-12-10 17:57:23 +08:00   ❤️ 3
    非必要的时候还习惯打./ 的同学。。。
    你们不怕.忘记打或者.和 /之间多敲了个空格吗?/狗头
    whywhywhy
        7
    whywhywhy  
       2019-12-10 18:15:07 +08:00 via Android
    @murphyyyy 哪个 windows。。。
    shiny
        8
    shiny  
       2019-12-10 18:16:43 +08:00
    @murphyyyy linux 上也一样,记得是为了安全原因,假设你要 ls,结果当前目录下也有一个 ls。
    love
        9
    love  
       2019-12-10 18:18:49 +08:00
    @shiny 当前目录下有 ls 为什么会影响 ls 的安全性?
    KyonLi
        10
    KyonLi  
       2019-12-10 18:20:05 +08:00 via iPhone
    @whywhywhy #7 Windows 不是优先执行当前目录下的 exe 吗,当初刚学 Linux 还适应了好长时间./xxx 执行
    KyonLi
        11
    KyonLi  
       2019-12-10 18:21:06 +08:00 via iPhone
    回复错人了,尴尬 应该 @murphyyyy
    k9982874
        12
    k9982874  
       2019-12-10 18:21:33 +08:00 via iPhone
    必须写,吃过 rm -rf 的亏
    wangkun025
        13
    wangkun025  
       2019-12-10 18:22:04 +08:00
    新手表示,不输入.
    CivAx
        14
    CivAx  
    OP
       2019-12-10 18:22:16 +08:00
    @k9982874 #12 你搞不好是我的前同事
    Humorce
        15
    Humorce  
       2019-12-10 18:28:00 +08:00 via iPhone
    @love 恶意程序也可以命名为 ls
    shiny
        16
    shiny  
       2019-12-10 18:31:22 +08:00
    @love 比如发你个文件夹,里面加个恶意程序,命名成 ls。你进去 ls 下就炸了。
    love
        17
    love  
       2019-12-10 18:36:12 +08:00
    @shiny 你想想可不可能,这是天大的安全 BUG,怎么可能在当前目录搜索可执行文件
    Oktfolio
        18
    Oktfolio  
       2019-12-10 18:39:29 +08:00
    我反正是必须写
    Oktfolio
        19
    Oktfolio  
       2019-12-10 18:40:32 +08:00
    但是 cd 后面不写
    wtks1
        20
    wtks1  
       2019-12-10 18:41:36 +08:00 via Android
    @love 看环境变量吧,如果把.加进变量里,这种操作就可以实现
    ajax10086
        21
    ajax10086  
       2019-12-10 18:45:40 +08:00 via iPhone
    第一个不写,第二个写
    skinny
        22
    skinny  
       2019-12-10 18:55:01 +08:00
    如果有通配符(没有通配符的也要按 tab 补全)必须写,这是有过教训的人才能理解的
    shawnLuo
        23
    shawnLuo  
       2019-12-10 19:08:29 +08:00
    跑脚本的时候才会写,其他都是直接路径名
    namaketa
        24
    namaketa  
       2019-12-10 20:03:02 +08:00
    @uxstone 吃过这个亏的人都会写
    manwei6341
        25
    manwei6341  
       2019-12-10 20:04:02 +08:00
    rubycedar
        26
    rubycedar  
       2019-12-10 20:06:39 +08:00 via iPhone
    @shiny 不是得要./ls 才能执行当前目录下的 ls 程序吗?
    murphyyyy
        27
    murphyyyy  
       2019-12-10 20:11:51 +08:00
    @shiny
    @whywhywhy
    @KyonLi
    在 windows powershell 上也是这个原因,是为了安全问题.

    图床地址,Base64 解码~~~~

    aHR0cHM6Ly9pbWd1ci5jb20vYS9jT29ZNmRE
    shiny
        28
    shiny  
       2019-12-10 20:21:06 +08:00
    @rubycedar 请阅读上下文
    27
        29
    27  
       2019-12-10 21:04:57 +08:00
    @uxstone 这两个有什么区别?
    liuzhiyong
        30
    liuzhiyong  
       2019-12-10 21:23:36 +08:00
    第一种情况,cd 不会写“./”;第二种情况,执行脚本会写“./”。
    lihongjie0209
        31
    lihongjie0209  
       2019-12-10 21:30:05 +08:00
    可执行文件不在 PATH 变量中才需要这种写法, 而且是 Linux bash 才有的情况, 在 Windows CMD 下直接使用 xxx.exe 也可以直接运行。

    所以写不写看你用什么 shell, 都是历史遗留问题然后变为习惯了
    yan5990853
        32
    yan5990853  
       2019-12-10 21:34:17 +08:00
    区别还是有的 不带./会查环境变量,可能有时候不是你想要的结果。
    crella
        33
    crella  
       2019-12-10 21:43:51 +08:00 via Android
    @lihongjie0209 powershell 要指定.\local_app.exe ,不指定的话会报错并提示本目录有 local_app.exe
    rubycedar
        34
    rubycedar  
       2019-12-10 21:47:32 +08:00 via iPhone
    @shiny 我还是没明白 不带./的可执行文件只会是$path 里的,当前目录下有 ls 又能怎么样?
    Sainnhepark
        35
    Sainnhepark  
       2019-12-10 21:49:59 +08:00 via Android
    除了 cd 以外的命令都要加
    icbmicbm
        36
    icbmicbm  
       2019-12-11 00:37:08 +08:00 via iPhone
    曾经是这样 直到有一次删东西打掉了一个“.” ... 不巧的是这个文件夹的命名还很离谱,然后当然是重装了
    yyws2012
        37
    yyws2012  
       2019-12-11 00:46:06 +08:00
    @wtks1 所以把 . 加入 PATH 是非常危险的行为
    ys0290
        38
    ys0290  
       2019-12-11 00:59:15 +08:00 via iPhone
    鸟哥私房菜好像说执行命令的顺序是当前目录,环境变量定义,PATH
    sleepm
        39
    sleepm  
       2019-12-11 01:02:23 +08:00 via Android
    这不是习惯好吧。。
    一个点代表当前目录
    两个点代表上一级目录
    msg7086
        40
    msg7086  
       2019-12-11 07:59:16 +08:00
    @rubycedar 上下文里说的是和你相反的假设前提。
    你说的内容只是在一次次重复他们的观点。

    @CivAx
    > bash myScript  和 ./myScript
    这是两个不同的命令,本身就不能互换。
    AntonChen
        41
    AntonChen  
       2019-12-11 08:26:45 +08:00 via Android
    自从执行 rm -rf ./* 巧漏 . 之后我就再也不用 ./ 了
    Davic1
        42
    Davic1  
       2019-12-11 09:34:25 +08:00
    # 同意 39 楼
    加点号敲起命令来逻辑上更顺畅一些。。。cd ./usr/(进入当前目录下的 /usr/文件夹中)
    chesterzzy
        43
    chesterzzy  
       2019-12-11 10:07:28 +08:00
    两种情况都写。因为不产生歧义。

    或者可以简单地理解为,强迫症- -
    sleepm
        44
    sleepm  
       2019-12-11 10:50:06 +08:00 via Android
    又仔细读了下帖子。。
    输路径,传参数的话,比如 cd,只要传的对就行,不会多此一举加./
    或者输命令,bash xxx 和./xxx 是有区别的
    如果 xxx 头部有注释使用啥执行,那你用 bash xxx 可能就报错
    比如
    #!/usr/bin/env php
    <?php
    phpinfo();

    那再讲下 env 它是从 path 中找 php,如果你指定 /bin/php,在你的系统可能没问题,但是到别的系统上估计就找不到这个文件,所以 env 使脚本兼容性更好

    或者再说 不加./执行当前目录下的文件,如果这个文件和 path 中的某个命令同名,那就会执行 path 中的那个,因为它会先从 path 中找那个命令
    hyperbin
        45
    hyperbin  
       2019-12-11 12:06:54 +08:00 via Android
    @murphyyyy 这和主题有什么关系吗?
    JimmyTinsley
        46
    JimmyTinsley  
       2019-12-11 14:38:15 +08:00
    除了 cd 之外都会加以保安全
    gpra8764
        47
    gpra8764  
       2019-12-11 15:51:06 +08:00
    @flyingghost 不太会啦,键盘上./就是在一起的,这也能加一个空格那真的狗头了
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4128 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 05:45 · PVG 13:45 · LAX 22:45 · JFK 01:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.