是否有可以将命令作为批处理列表运行的应用程序?

是否有可以将命令作为批处理列表运行的应用程序?

有没有一个应用程序可以收集命令并连续运行它们?当我要运行多个不应同时运行的命令时,这会很有帮助。如果有一个小窗口可以让我看到正在运行和即将执行的命令,那也很有趣。

我搜索“linux shell 批处理列表”,但找不到任何内容。

答案1

传统上,在多用户环境中,batch用于此类事情。想象一下 3 个人在一台特定的共享机器上工作。每个人可能都想编译他们的程序,但他们只想一次运行一个编译,这样他们就可以进行编辑而不会造成太多干扰。每个人都可以发出自己的命令,系统将按顺序处理每个命令。

echo cc a.c |batch 
echo make projectUser2 |batch 
echo make projectBUser3 |batch 

每个构建都会按顺序运行。

您需要安装该at软件包才能获取该batch命令。

sudo apt-get install at

但是,如果您是自己计算机上的单个用户,那么您只需编辑一个文件并将每个命令放在自己的行上即可。例如,假设您创建一个fileWithCommands包含以下内容的文件名:

cc a.c
make projectUser2
make projectBUser3

获取 bash 来使用它,

bash ./fileWithCommands

其他答案更多地使用 bash shell 命令语言,以提供更多情报报告

如果您想将输出保存在文件中,那么

bash ./fileWithCommands >ouput.log` 

这样做的话,错误就会报告给终端。要将错误正确重定向到同一文件,则命令是:

bash ./fileWithCommands >outputWithErrors.log 2>&1

答案2

听起来您正在寻找一个相当容易学习的 shell 脚本,但需要更多的知识来合理地适应单个答案。

我建议阅读:

外壳手册
bash 手册

这些几乎包含开始编写 shell 脚本所需的所有信息。此外,您现在所在的站点是 shell 脚本编写的重要资源。当您完成本次学习时,请根据需要提出尽可能多的问题,但尽量让他们专注于特定问题,以便更容易回答。然而,您可能遇到的大多数问题可能已经得到解答,因此您可以使用搜索功能来找到您正在寻找的答案。

至于更适合您的具体问题的答案,我提出了以下功能,使您能够在命令运行时监视命令:

run_command () {
    local command=($@)
    printf '%s' "Running: ${command[*]}..."
    if out=$("${command[@]}" 2>&1); then
        printf '%s\n' 'Successful'
        printf '%s\n' "$out"
    else
        printf '%s\n' 'Failed'
        printf '%s\n' "$out"
    fi
}

您可以将其放入 bash 脚本中,然后向其提供如下命令:

#!/bin/bash

run_command () {
    local command=($@)
    printf '%s' "Running: ${command[*]}..."
    if out=$("${command[@]}" 2>&1); then
        printf '%s\n' 'Successful'
        printf '%s\n' "$out"
    else
        printf '%s\n' 'Failed'
        printf '%s\n' "$out"
    fi
}

run_command sleep 1
run_command sleep 2
run_command ls -ltr ~/tmp
run_command ls -ltr /fake/dir

它将产生类似于以下内容的输出:

$ ./script.sh
Running: sleep 1...Successful

Running: sleep 2...Successful

Running: ls -ltr /Users/jessebutryn/tmp...Successful
total 8
-rwxr-xr-x  1 jessebutryn  staff  337 Mar 30 07:41 script.sh
Running: ls -ltr /fake/dir...Failed
ls: /fake/dir: No such file or directory

答案3

Linux shell 和 CRON 服务提供了一种直接的方法来完成此任务;这里我们编写一个简单的 BASH 脚本来获取根分区已使用的百分比并写入日志,然后 10 秒后,检查可用的实际可用内存并将其附加到同一日志文件。我们将使用 CRON 每 5 分钟运行一次此作业。

脚本:run_commands.sh

[user ~]# cat run_commands.sh
   #!/bin/bash
   LOG=/home/user/command.log
   DISK=`df -h| grep -w / | awk '{print $5}'`
   echo `date -u` "" "Root PART % Used" = $DISK  >> $LOG
   sleep 10
   REALMEM=`free -m | awk 'NR==2{print $4}'`
   echo `date -u` "" "Real FREE Memory in MB" = $REALMEM  >> $LOG
   exit

现在让 CRON 每 5 分钟运行一次这个脚本:

crontab -e
*/5 * * * * /home/user/run_commands.sh
 wq:

tail -f现在让我们通过在日志文件 command.log 上运行来看看它是否工作

[user ~]# tail -f command.log
Sat Mar 30 13:40:01 UTC 2019  Root PART % Used = 11%
Sat Mar 30 13:40:11 UTC 2019  Real FREE Memory in MB = 482
Sat Mar 30 13:45:01 UTC 2019  Root PART % Used = 11%
Sat Mar 30 13:45:11 UTC 2019  Real FREE Memory in MB = 482

Shell 脚本和 CRON 是我几乎每天都使用的工具。该脚本非常基本,因为没有参数验证也没有错误检查。但它很简单并且可以完成工作。

-标记

答案4

简单的答案是,是的,一个 shell 脚本。这是基础知识

创建一个包含以下内容的文件:

#!/bin/bash
command1
command2
command3
etc

然后使其可执行。

chmod +X «the-file-name»

如果你想看到正在发生的事情的踪迹。然后添加set -x为第二行(在#!/bin/bash(这必须是第一行)之后,在要跟踪的命令之前)。

通过键入运行脚本./«the-file-name»(您需要./或其他位置信息,例如«another-directory-name»/«the-file-name»)。

相关内容