V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
zhoudaiyu
V2EX  ›  Linux

敲命令时参数总忘记加括号怎么破?

  •  
  •   zhoudaiyu · 2021-11-23 10:31:43 +08:00 via iPhone · 4660 次点击
    这是一个创建于 1099 天前的主题,其中的信息可能已经有所发展或是发生改变。
    举个🌰,curl 127.0.0.1/?a=1&b=2 没加括号就变成了两个命令 curl 127.0.0.1/?a=1 和 b=2 。这种有办法避免吗?
    第 1 条附言  ·  2021-11-23 12:50:15 +08:00
    括号 -> 引号
    42 条回复    2021-11-24 23:52:05 +08:00
    clf
        1
    clf  
       2021-11-23 10:34:27 +08:00
    后面整个放在引号里是不是就可以了。
    yolee599
        2
    yolee599  
       2021-11-23 10:34:54 +08:00   ❤️ 11
    定一个规定,忘记一次就给 curl 项目捐 1 美元
    zhoudaiyu
        3
    zhoudaiyu  
    OP
       2021-11-23 10:36:08 +08:00 via iPhone
    @clf 是,但是老忘记….
    kidonng
        4
    kidonng  
       2021-11-23 10:44:34 +08:00 via Android
    尚未发布的 fish shell 3.4 可以开启 ampersand-nobg-in-token 支持直接输入这类命令 ( PR #7991 )
    weixiangzhe
        5
    weixiangzhe  
       2021-11-23 10:44:35 +08:00
    没有啥子问题,再来一遍不就好,建议快捷键 ctrl+p 上次的输入,ctrl+a 行首 ctrl+e 行首 ctrl+b ctrl+f 移动光标,只要我操作 够快,再来一遍无所谓吧
    kidonng
        6
    kidonng  
       2021-11-23 10:53:28 +08:00 via Android
    补充一下,ampersand-nobg-in-token 是解决 &符号的问题,还需要开 qmark-noglob 解决 ? 符号的问题
    jaredyam
        7
    jaredyam  
       2021-11-23 11:02:25 +08:00
    所以要保持加引号的好习惯,甚至于什么时候用双引号什么时候用单引号,shell 脚本写多了大概会被动养成。
    josexy
        8
    josexy  
       2021-11-23 11:15:32 +08:00   ❤️ 1
    时刻提醒自己要加引号,看下面这两条命令的区别就知道了
    rm -rf /home/ubuntu/ temp
    rm -rf "/home/ubuntu/ temp"
    laoyur
        9
    laoyur  
       2021-11-23 11:17:03 +08:00
    不是该说忘记加引号吗?
    herojaxy
        10
    herojaxy  
       2021-11-23 11:22:32 +08:00
    每次成对敲,再回退一格不就行了,""()[]{}
    这样肯定忘记
    ChrisFreeMan
        11
    ChrisFreeMan  
       2021-11-23 11:45:16 +08:00
    记得以前看到一个 star 很高的 python 写的命令行工具,只要输错指令,敲出 fuck 就会帮你纠正
    zoharSoul
        12
    zoharSoul  
       2021-11-23 12:07:38 +08:00
    @weixiangzhe #5 ctrl+a 也太难按了吧? 小拇指按 ctrl 无名指按 a? mac 键盘上模拟了下感觉手要断了
    nekomiao
        13
    nekomiao  
       2021-11-23 12:18:54 +08:00 via Android
    @zoharSoul 用手指根按,不用用手指头
    bowser1701
        14
    bowser1701  
       2021-11-23 12:29:55 +08:00 via iPhone
    @zoharSoul ctrl 映射到大小写键
    learningman
        15
    learningman  
       2021-11-23 12:31:49 +08:00
    @josephxrays #8 还可以是 rm -rf / home/ubuntu/temp
    julyclyde
        16
    julyclyde  
       2021-11-23 12:48:01 +08:00
    嘿嘿,这应该是加引号啊不是括号啊
    和 lz 同样的 curl 问题,我以前出过 100 万 usd 的事故
    zhoudaiyu
        17
    zhoudaiyu  
    OP
       2021-11-23 12:49:58 +08:00
    @julyclyde #16 是我写错了,应该是引号,感谢。。我 append 一下
    kidonng
        18
    kidonng  
       2021-11-23 13:06:29 +08:00 via Android
    人家都说了总忘记,还提醒人家加引号感觉怪怪的。

    @ChrisFreeMan nvbn/thefuck
    sprite82
        19
    sprite82  
       2021-11-23 13:33:13 +08:00
    忘记一次,就敲 100 遍带引号的命令,来过一次就不会忘了
    pkookp8
        20
    pkookp8  
       2021-11-23 14:15:38 +08:00 via Android
    只要看到&就加引号
    2i2Re2PLMaDnghL
        21
    2i2Re2PLMaDnghL  
       2021-11-23 14:39:15 +08:00
    @kidonng 貌似 the fuck 没这条规则?
    Xusually
        22
    Xusually  
       2021-11-23 14:46:54 +08:00
    @julyclyde 请说出你的故事
    yidinghe
        23
    yidinghe  
       2021-11-23 14:49:17 +08:00 via Android
    1 、先打两个引号; 2 、然后按一下左方向键使光标回到两个引号之间; 3 、然后再输入参数内容。
    goosegugu
        24
    goosegugu  
       2021-11-23 14:52:11 +08:00
    猫猫头大军不请自来
    kidonng
        25
    kidonng  
       2021-11-23 14:59:40 +08:00 via Android
    @2i2Re2PLMaDnghL 粗略翻了下貌似是没有,估计因为涉及 shell 的解析规则做不到
    2i2Re2PLMaDnghL
        26
    2i2Re2PLMaDnghL  
       2021-11-23 15:12:46 +08:00
    @kidonng 但是有未闭合的引号,sh 解析肯定是可以做的,都是纯字符串丢给 python 处理
    问题大概只是没人写(
    julyclyde
        27
    julyclyde  
       2021-11-23 16:09:04 +08:00
    @Xusually 就是因为&符号被 shell 解释,导致缺了一个参数,这个参数没有明确指定的时候,默认值是另一个,然后就执行了一个本来已经不打算再用的模块,把内存撑爆了,一个机房所有同类服务器进程全都爆了
    SingeeKing
        28
    SingeeKing  
       2021-11-23 16:13:38 +08:00
    用 zsh 会自动加
    SingeeKing
        29
    SingeeKing  
       2021-11-23 16:13:58 +08:00
    抱歉说错了,不是自动加引号,是会自动转义
    wangyzj
        30
    wangyzj  
       2021-11-23 16:14:17 +08:00
    这个猫我见过
    Ritr
        31
    Ritr  
       2021-11-23 16:49:12 +08:00
    1.curl ""
    2.光标回退
    3.输入地址
    写其他代码也是,先 xx(){}再往里填
    kidonng
        32
    kidonng  
       2021-11-23 18:11:09 +08:00
    @SingeeKing 万能的 zsh 又来了,又把哪个插件当原生了?

    ```
    kid@Pavilion ~ % curl localhost/?a=1&b=2
    [1] 22401
    zsh: no matches found: localhost/?a=1
    kid@Pavilion ~ %
    [1] + exit 1 curl localhost/?a=1
    ```
    kidonng
        33
    kidonng  
       2021-11-23 18:15:05 +08:00
    @2i2Re2PLMaDnghL 确实和 shell 解析有关,因为这类命令的运行过程是这样的 (以 curl localhost/?a=1&b=2 为例)

    1. Shell 起一个后台进程运行 curl localhost/?a=1 ,这个命令本身还有一个 ? 的 glob 问题
    2. Shell 运行 b=2 ,然后报 command not found

    thefuck 应该只会看上一条命令,而不能综合考虑整个上下文。
    rrfeng
        34
    rrfeng  
       2021-11-23 18:17:06 +08:00
    oh my zsh 会自动转义,你按 & 它自动输入 \&,粘贴的时候也有效。
    rrfeng
        35
    rrfeng  
       2021-11-23 18:17:34 +08:00
    但是最好还是习惯性打引号,不能依赖工具。
    zhoudaiyu
        36
    zhoudaiyu  
    OP
       2021-11-23 18:35:19 +08:00 via iPhone
    @yolee599 厨子不给钱,让我打钱吗😂
    oeagut
        37
    oeagut  
       2021-11-23 18:39:00 +08:00
    头像这个猫是不是 B 站发视频的啊
    2i2Re2PLMaDnghL
        38
    2i2Re2PLMaDnghL  
       2021-11-23 18:40:23 +08:00
    @kidonng thefuck 看的是 fc -ln -10 ,你可以从 thefuck --alias 里看到。
    Huelse
        39
    Huelse  
       2021-11-23 18:56:50 +08:00
    对于这种常用的,要不自己写个 alias ?变量放引号中
    newsj
        40
    newsj  
       2021-11-24 08:40:57 +08:00
    多错几次就记得了
    p1gd0g
        41
    p1gd0g  
       2021-11-24 09:18:52 +08:00
    这就是我为什么讨厌写脚本,很没安全感。
    weixiangzhe
        42
    weixiangzhe  
       2021-11-24 23:52:05 +08:00
    @zoharSoul 默认确实是的,我也是 caps 映射成 长按 ctrl, 短按 esc 的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6043 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 02:28 · PVG 10:28 · LAX 18:28 · JFK 21:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.