• 请不要在回答技术问题时复制粘贴 AI 生成的内容
CivAx
V2EX  ›  程序员

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

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

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

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

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

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

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

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

    或者再说 不加./执行当前目录下的文件,如果这个文件和 path 中的某个命令同名,那就会执行 path 中的那个,因为它会先从 path 中找那个命令
    hyperbin
    hyperbin
    Dec 11, 2019 via Android
    45
    @murphyyyy 这和主题有什么关系吗?
    JimmyTinsley
    JimmyTinsley
    Dec 11, 2019
    46
    除了 cd 之外都会加以保安全
    gpra8764
    gpra8764
    Dec 11, 2019
    47
    @flyingghost 不太会啦,键盘上./就是在一起的,这也能加一个空格那真的狗头了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   809 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 97ms · UTC 17:18 · PVG 01:18 · LAX 09:18 · JFK 12:18
    ♥ Do have faith in what you're doing.