shell 下有没有办法解决人追加命令的需求 - V2EX
theoda

shell 下有没有办法解决人追加命令的需求

  •  
  •   theoda Jul 13, 2020 4114 views
    This topic created in 2128 days ago, the information mentioned may be changed or developed.

    想法来自下面这个类似场景:

    本来可以很朴素的 命令 A ; 命令 B 分号隔开一下就好,但奈何某些情况

    命令 A 按下回车后,不料等了很久很久还没完成,这才想起命令 B

    然后就两难了:

    1. 中断 A,就浪费了等 A 的时间
    2. 在 A 的一坨输出里强行打进 B 命令+回车,可能会扰乱输入流,影响输出排版

    所以想知道有没有类似队列或者其他办法,能解决上面这种追加命令的需求

    现有环境是 macOS+Terminal+zsh

    3 replies    2021-07-03 11:28:54 +08:00
    theoda
        1
    theoda  
    OP
       Jul 13, 2020
    还是自己找到了一个古老的解决方案:[Task Spooler - batch is back!]( https://vicerveza.homeunix.net/~viric/soft/ts/)

    ```sh
    brew install task-spooler
    ```

    测试了一下 Catalina 还能用,供 v 友参考了
    aloxaf
        2
    aloxaf  
       Jul 29, 2020
    1. 用 tmux,然后就可以再开一个 panel 执行
    2. C-z 挂起,完事儿了再 fg 恢复
    About     Help     Advertise     Blog     API     FAQ     Solana     3506 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 108ms UTC 11:55 PVG 19:55 LAX 04:55 JFK 07:55
    Do have faith in what you're doing.
    ubaomsnsnddmindexpchomeyahoorakutenmypapermeadowduckbidyahooyoubaozxmzxmasdabnvcgcvbfgdfscvmmhjkxxddcyybgbzznbnccubaouaituacvGXCVETGDGYHFGBCVBFJFHCBRECBCGDGET54WRWRRWERWREWWRWERRWERSDGEWSFDSFSFfbbsubaofhddfgewrdgdfewwrewwretruyutututdfgfgdgdfgtetgdfgtdfgdert4gdfggwr235wer3wevsdfsdfgdfertxcvsdfrwerhfddfgcvbrwfafbdfhjghbmnlghrtygfdscxvxcvxcsvdasfdffgdcvsdftertsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfshasha9178shasha9178shasha9178shasha9178shasha9178liflif2liflif2liflif2liflif2liflif2liblib3liblib3liblib3liblib3liblib3zhazha444zhazha444zhazha444zhazha444zhazha444dende5dendedendendenden2denden21fenfen9fenf619fen619fenfe9fe619sdfsdfsdfsdfsdfzhazh90zhazh0zhaa50zha90zh590zhozhozzhozhzhozhozhozho2lislislls95lili95lils5liss9sdf0ty987sdft876sdft9876sdf09876sd0t9876sdf0ty98sdf0976sdf0ty986sdf0ty96sdf0t76sdf0876df0ty98sf0t876sd0ty76sdy76sdf76sdf0t76sdf0ty9sdf0ty98sdf0ty987sdf0ty98sdf6676sdf876sd876sd876sdf6sdf6sdf9876sdf0tsdf06sdf0ty9776sdf0ty9776sdf0ty76sdf8876sdf0tsd6sdf06s688876sd688sdf86
    theoda
        3
    theoda  
    OP
       Jul 3, 2021
    aloxaf 友友,是我描述不清楚。描述中 A; B 应该是 A && B,即完成了 A 才能继续 B 。实际情况类似:

    ```sh
    scp [email protected]:~/foo.zip . # A: 下载 foo.zip
    unzip foo.zip && cp -a foo /mnt/flash/. # B: 解压、拷贝到 U 盘
    ```

    如果 C-C 后重新敲命令改成 A && B,就白白浪费了 scp 的下载时间;
    如果想等 scp 下载完再敲第 2 句,人回来得不及时,就得晚点拿到 U 盘。

    我想把整个流程比喻成 bullet mode,子弹发射出去,我可以随时继续发射,而非命中目标后才发射第二颗子弹。


    之所以回来回复,是因为我突然想到了一个勉强的解决方案:

    ```sh
    A &
    wait && B & # 随时追加
    wait && C &
    ```

    只是需要第一次敲命令必须记得 &