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 脚本的输出?
如果我正确理解您的问题,您可以使用以下内容:
#!/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.logapt-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)