文件被复制并重命名,但我也遇到错误

时间:2018-07-18 20:37:53

标签: linux bash shell scripting

我有一个脚本可以读取文本文件,其中列出了所有节点:

node1
node2
node3
.
.
.

它为/etc/icinga2/zones.d/master/hosts/new/目录中的每个节点创建一个“ .conf”文件

将文件名linux-template的内容复制到每个新的conf文件中。

一切正常,但每个节点也会出错:

有人可以帮忙吗?

谢谢

这是我的脚本:

#!/bin/bash

cd /etc/icinga2/zones.d/master/hosts/new

while read f; do
   cp -v "$f" /etc/icinga2/zones.d/master/hosts/new/"$f.conf"
   cp linux-template.conf "$f.conf"
   chown icinga:icinga "$f.conf"

done < linux-list.txt

一旦所有内容都被复制,我将在下面得到这些错误(对于所有节点,即节点1):

cp: cannot stat ‘node1’: No such file or directory 
chown: cannot access ‘node1’: No such file or directory

1 个答案:

答案 0 :(得分:1)

似乎在抱怨,因为您的目录中没有名为“ node1”的文件,并且您已启用了详细模式。

运行该脚本时,如果您不在/etc/icinga2/zones.d/master/hosts/new/目录中,则该脚本看起来也会引起不良行为。

脚本说:

  1. 将文件node1,node2,...复制到我的当前目录中,然后将 复制到这里:/etc/icinga2/zones.d/master/hosts/new /“ $ f.conf”
  2. 从当前目录复制linux-template.conf并将其命名为“ node [1-9] .conf”。
  3. 在当前目录中添加“ node [1-9] .conf”。

我建议使用绝对路径,但我不确定为什么需要第一个cp。如果您打算将linux-template.conf复制到在步骤1中创建的每个node[1-9].conf中,则无论如何第二个副本将创建并覆盖该文件,并且不需要步骤1。