Bash 脚本未录制

mac*_*n98 3 command-line bash scripts

所以,我在这里,玩一些 bash 脚本,但有些东西不起作用:

#!/bin/bash

script -c \
sudo apt-get update &&
sudo apt-get upgrade &&

exit

echo "(Not important for the question)"
Run Code Online (Sandbox Code Playgroud)

我想运行通常的更新和升级的东西,并记录输出,但是当我运行脚本时,它只说脚本开始在 apt-get 中记录,显示了 sudo 的用法(usage: sudo -h是第一行),并说 sript 已完成。之后它会启动 sudo 的东西。

我需要做什么才能记录更新和升级任务的输出?一般来说,我如何记录整个 shell 脚本的输出?

Way*_*Yux 9

如果我正确理解您的问题,您可以使用以下内容:

#!/bin/bash

apt-get update &> update.log
apt-get -y upgrade &> upgrade.log

echo "all done"
Run Code Online (Sandbox Code Playgroud)

将此脚本另存为run_updates.sh,使其可执行chmod 755 run_updates.sh并使用sudo ./run_updates.sh.
如果要将所有输出保存在一个文件中,请从脚本中删除&> updates.log&> upgrades.log并按以下方式运行脚本sudo./run_updates.sh &> run_updates.log


脚本说明:

  • apt-get update &> update.log运行apt-get update并将输出保存在update.log
  • apt-get -y upgrade &> upgrade.log运行apt-get upgrade并将输出保存在upgrade.log. 在-y从要求继续倾向于阻止(它假定“是”)

关于重定向的说明:
您可以使用下面的重定向将命令或脚本的输出“发送”到文件。

  • &> 重定向 STDOUT 和 STDERR
  • >1>重定向标准输出
  • 2> 重定向 STDERR

关于 sudo 的说明:
这可能是您出错的原因。运行sudo脚本中需要的命令时,最好将命令sudo放在脚本中而不放在脚本中并使用sudo. 否则,您必须以某种方式将 sudo 密码提供给脚本,这很糟糕。


编辑:
在以下代码中,两个 apt 命令的输出都重定向到update.log. double >( >>) 用于将数据附加到文件中(而不是替换它)

#!/bin/bash

apt-get update &> update.log
apt-get -y upgrade &>> update.log

echo "all done"
Run Code Online (Sandbox Code Playgroud)