【问题标题】:create a file through a variable in bash通过bash中的变量创建文件
【发布时间】:2014-05-12 10:00:56
【问题描述】:

我有一个简单的 bash 脚本来创建文件,然后将 rsync 的输出记录到该文件中。

但是,它不起作用我不断收到“找不到命令”,没有创建文件,也没有登录到它。我收到错误“/var/log/”是一个目录。

#!/bin/bash
FILENAME=ram_sys4-$(date +%Y_%m_%d_%H:%M).log
touch /var/log/$(FILENAME)
date >> /var/log/$(FILENAME)
rsync -r -L -H -g -o -p -t -a --delete --verbose --log-format="%t %i %l %f %M %h %o \n" --log-file=/var/log/$(FILENAME) /root/Desktop/R/ /root/Desktop/W/
date >> /var/log/$(FILENAME)

【问题讨论】:

  • 使用${FILENAME}代替$(FILENAME)
  • 请不要用评论回答问题。

标签: bash date filenames


【解决方案1】:

$(VAR_NAME) 语法在 Makefiles 中使用,但在 bash 中不使用。在 bash 中,使用

${VAR_NAME}

甚至更简单

$VAR_NAME

【讨论】:

  • 如果我的文件名有日期 + 小时和分钟,下次脚本调用文件名时,例如在 .tar 命令期间,它会 tar 同一个文件还是尝试 tar 一个新文件?因为,自 rsync 任务开始后,小时或分钟可能已更改
【解决方案2】:
#!/bin/bash
FILENAME=ram_sys4-$(date +%Y_%m_%d_%H:%M).log
touch /var/log/${FILENAME}
date >> /var/log/${FILENAME}
rsync -r -L -H -g -o -p -t -a --delete --verbose --log-format="%t %i %l %f %M %h %o \n" --log-file=/var/log/${FILENAME} /root/Desktop/R/ /root/Desktop/W/
date >> /var/log/${FILENAME}

$(FILENAME)Command Substitution 你想要做的是 Parameter Expansion

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-01
    • 2021-12-19
    • 2020-10-16
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 2020-01-27
    • 2016-06-30
    相关资源
    最近更新 更多