【问题标题】:Can I prevent a subsequent chained bashed command from running?我可以阻止后续链接的 bashed 命令运行吗?
【发布时间】:2019-10-22 03:24:31
【问题描述】:

我想阻止使用 ; 链接的 bash 命令执行。在上一个命令仍在运行时停止运行。

例如我写并提交了command a; command b,但是当command a 运行时,我改变了主意,想阻止command b 运行。

我无法使用kill,因为后续命令实际上并未执行。 bash 有可以操作的命令队列吗?

为了澄清,我确信可以制作一个新脚本或允许我创建队列的东西,但这不是这个问题的内容。我特别想知道 bash 是否可以阻止分号后的命令在我“提交”后运行。

【问题讨论】:

  • 这个问题似乎根本没有包括任何解决问题的尝试。请编辑问题以显示您尝试过的内容,并使用Minimal, Complete, and Verifiable example 显示您遇到的特定障碍。欲了解更多信息,请参阅How to Ask
  • @magarnicle:链式命令是什么意思?您只是在运行一个又一个语句(命令),这是程序的正常行为方式。如果您在执行“命令 a”时杀死整个脚本,这将杀死所有内容。如果您只想终止“命令 a”并让脚本使用“命令 b”继续,则必须终止“命令 a”。
  • 如果你这样启动它,我想你可能不得不启动一个新终端并终止在初始终端中运行这两个作业的 bash 会话。
  • 这也会杀死第一个命令,我不想这样做。
  • 当您改变主意命令a运行时,您想从外部控制它吗?您可以使用警卫[[ -f skipme ]] || command_b; rm skipme 2>/dev/null,如果您希望命令 b 被忽略,请执行touch skipme

标签: linux bash shell command-line


【解决方案1】:

考虑这两个脚本:

runner.sh

#!/bin/bash

while true

do
    next_command=$(head -1 next_commands.list)
    $next_command
    sleep 60 #added to simulate processing time
done

next_commands.list

id
ls
echo hello

您可以修改 next_commands.list 文件的内容来创建一个队列类型,该队列接下来应该执行哪些命令。

【讨论】:

  • 只需运行bash next_commands.list。读取文件的正确方法是使用while read -r
  • 如果您按照建议运行列表,则问题要求在脚本启动后修改命令列表的选项如何更改列表?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-13
相关资源
最近更新 更多