V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
CivAx
V2EX  ›  程序员

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

  •  
  •   CivAx · Dec 10, 2019 · 5230 views
    This topic created in 2331 days ago, the information mentioned may be changed or developed.

    比如 cd usr/ 和 cd ./usr/

    或者 bash myScript 和 ./myScript

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

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

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

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

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

    或者可以简单地理解为,强迫症- -
    sleepm
        44
    sleepm  
       Dec 11, 2019 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  
       Dec 11, 2019 via Android
    @murphyyyy 这和主题有什么关系吗?
    JimmyTinsley
        46
    JimmyTinsley  
       Dec 11, 2019
    除了 cd 之外都会加以保安全
    gpra8764
        47
    gpra8764  
       Dec 11, 2019
    @flyingghost 不太会啦,键盘上./就是在一起的,这也能加一个空格那真的狗头了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1027 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 113ms · UTC 22:08 · PVG 06:08 · LAX 15:08 · JFK 18:08
    ♥ Do have faith in what you're doing.