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

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

  •  
  •   CivAx · 39 天前 · 3173 次点击
    这是一个创建于 39 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如 cd usr/ 和 cd ./usr/

    或者 bash myScript 和 ./myScript

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

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

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

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

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

    或者可以简单地理解为,强迫症- -
    sleepm
        44
    sleepm   38 天前 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   38 天前 via Android
    @murphyyyy 这和主题有什么关系吗?
    JimmyTinsley
        46
    JimmyTinsley   38 天前
    除了 cd 之外都会加以保安全
    gpra8764
        47
    gpra8764   38 天前
    @flyingghost 不太会啦,键盘上./就是在一起的,这也能加一个空格那真的狗头了
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2281 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 45ms · UTC 15:31 · PVG 23:31 · LAX 07:31 · JFK 10:31
    ♥ Do have faith in what you're doing.