好吧,我是一个linux新手,我遇到了一个简单的bash脚本问题.
我有一个程序在运行时添加到日志文件中.随着时间的推移日志文件变得巨大.我想创建一个启动脚本,它将在每次运行之前重命名和移动日志文件,有效地为每次运行程序创建单独的日志文件.这是我到目前为止所得到的:
DATE=$(date +"%Y%m%d%H%M")
mv server.log logs/$DATE.log
echo program
Run Code Online (Sandbox Code Playgroud)
运行时,我看到了这个:
: command not found
program
Run Code Online (Sandbox Code Playgroud)
当我cd到logs目录并运行dir时,我看到:
201111211437\r.log\r
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?我假设有一些我缺少的语法问题,但我似乎无法弄明白.
更新:感谢下面的shellter评论,我发现问题是由于我在Windows中的Notepad ++中编辑.sh文件,然后通过ftp发送到服务器,我通过ssh运行文件.在文件上运行dos2unix后,它可以工作.
新问题:如何才能正确保存文件,以避免每次重新发送文件时都必须执行此修复?
小智 67
mv server.log logs/$(date -d "today" +"%Y%m%d%H%M").log
Run Code Online (Sandbox Code Playgroud)
Dav*_* W. 24
你从脚本中发布的几行看起来没问题.它可能更深一些.
你需要找到哪一行给你这个错误.添加set -xv到脚本的顶部.这将打印出行号和正在执行的命令给STDERR.这将帮助您确定脚本中您获得此特定错误的位置.
顺便说一句,你的脚本顶部有一个shebang吗?当我看到这样的东西时,我通常会认为它与Shebang存在问题.例如,如果您#! /bin/bash位于顶部,但是您的bash解释器位于/usr/bin/bash,则会看到此错误.
新问题:如何才能正确保存文件,以避免每次重新发送文件时都必须执行此修复?
两种方式:
bash中的单行方法的工作原理如下。
[部分输出]> $(日期“ +%Y.%m。%d-%H.%M.%S”)。ver
将创建一个带有ver扩展名的时间戳名称的文件。如下所示将工作快照列出日期戳文件名的工作文件可以表明其工作正常。
find . -type f -exec ls -la {} \; | cut -d ' ' -f 6- >$(date "+%Y.%m.%d-%H.%M.%S").ver
当然
cat somefile.log > $(date "+%Y.%m.%d-%H.%M.%S").ver
甚至更简单
ls > $(date "+%Y.%m.%d-%H.%M.%S").ver
我使用这个命令来简单地旋转文件:
mv output.log `date +%F`-output.log
Run Code Online (Sandbox Code Playgroud)
在本地文件夹中我有 2019-09-25-output.log
首先感谢楼上各位的解答!他们导致了我的解决方案。
我将此别名添加到我的 .bashrc 文件中:
alias now='date +%Y-%m-%d-%H.%M.%S'
Run Code Online (Sandbox Code Playgroud)
现在,当我想在文件(例如构建日志)上添加时间戳时,我可以这样做:
mvn clean install | tee build-$(now).log
Run Code Online (Sandbox Code Playgroud)
我得到的文件名如下:
构建-2021-02-04-03.12.12.log
| 归档时间: |
|
| 查看次数: |
148149 次 |
| 最近记录: |