V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
theoda
V2EX  ›  Z shell

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

  •  
  •   theoda · 2020-07-13 21:33:15 +08:00 · 3239 次点击
    这是一个创建于 1628 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    然后就两难了:

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

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

    现有环境是 macOS+Terminal+zsh

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

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

    测试了一下 Catalina 还能用,供 v 友参考了
    aloxaf
        2
    aloxaf  
       2020-07-29 18:24:44 +08:00
    1. 用 tmux,然后就可以再开一个 panel 执行
    2. C-z 挂起,完事儿了再 fg 恢复
    theoda
        3
    theoda  
    OP
       2021-07-03 11:28:54 +08:00
    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 &
    ```

    只是需要第一次敲命令必须记得 &
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2505 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:33 · PVG 09:33 · LAX 17:33 · JFK 20:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.