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

2020-07-13 21:33:15 +08:00
 theoda

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

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

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

然后就两难了:

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

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

现有环境是 macOS+Terminal+zsh

3039 次点击
所在节点   Z shell
3 条回复
theoda
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
2020-07-29 18:24:44 +08:00
1. 用 tmux,然后就可以再开一个 panel 执行
2. C-z 挂起,完事儿了再 fg 恢复
theoda
2021-07-03 11:28:54 +08:00
aloxaf 友友,是我描述不清楚。描述中 A; B 应该是 A && B,即完成了 A 才能继续 B 。实际情况类似:

```sh
scp user@example.com:~/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 &
```

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/689718

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX