有没有一个应用程序可以收集命令并连续运行它们?当我要运行多个不应同时运行的命令时,这会很有帮助。如果有一个小窗口可以让我看到正在运行和即将执行的命令,那也很有趣。
我搜索“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 脚本,但需要更多的知识来合理地适应单个答案。
我建议阅读:
这些几乎包含开始编写 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»
)。