一尘不染

在BASH中使用mv向文件名添加时间戳

linux

好吧,我是linux新手,我在使用简单的bash脚本时遇到了问题。

我有一个程序可以在运行时添加到日志文件中。随着时间的流逝,日志文件变得越来越大。我想创建一个启动脚本,该脚本将在每次运行之前重命名并移动日志文件,从而为程序的每次运行有效地创建单独的日志文件。到目前为止,这是我得到的:

糊盒

DATE=$(date +"%Y%m%d%H%M")
mv server.log logs/$DATE.log
echo program

运行时,我看到以下内容:

: command not found
program

当我CD到logs目录并运行dir时,我看到以下内容:

201111211437\r.log\r

这是怎么回事?我假设我缺少一些语法问题,但似乎无法弄清楚。


更新:由于下面的Shellter评论,我发现问题是由于我正在Windows的Notepad
++中编辑.sh文件,然后通过ftp发送到服务器,然后通过ssh运行文件。在文件上运行dos2unix后,它可以工作。

新问题:如何首先正确地保存文件,以避免每次重新发送文件时都必须执行此修复程序?


阅读 1159

收藏
2020-06-03

共1个答案

一尘不染

您从脚本中发布的几行对我来说还不错。它可能更深一些。

您需要找到哪条线给您这个错误。添加set -xv到脚本的顶部。这将打印 出行 号和正在执行到 STDERR
的命令。这将帮助您确定在脚本中哪个位置出现此特定错误。

顺便说一句,您的脚本顶部有一个shebang吗?当我看到这样的东西时,通常我希望它与Shebang有关。例如,如果您#! /bin/bash位于顶部,但bash解释器位于中/usr/bin/bash,则会看到此错误。

编辑

新问题:如何首先正确地保存文件,以避免每次重新发送文件时都必须执行此修复程序?

两种方式:

  1. 编辑文件时,选择“ _编辑”- >“ EOL转换”->“ Unix格式”_菜单项。一旦具有正确的行尾,Notepad ++将保留它们。
  2. 要确保所有新文件的行尾都正确,请转到“ 设置”- >“首选项”_菜单项,然后拉起“ _首选项” 对话框。选择“ 新文档/默认目录” 选项卡。在“ 新建文档格式”下 ,选择“ Unix” 单选按钮。单击 关闭 按钮。
2020-06-03