将参数传递给远程机器

时间:2015-04-21 11:28:02

标签: bash parameters host

我希望能够将参数传递给远程机器。 在这个脚本中,我想根据权限在远程目标机器上chmod一些文件,我在源机器上的相同文件中找到这些文件。

如果目标计算机是我运行脚本的同一台计算机(chmod $ perm $ path部分代码可以工作),它对我有用。 如果我尝试在远程计算机上chmod文件,它不起作用(ssh root @“$ {destnode}”chmod $ perm $ path)。

还有另一个问题。此脚本无法处理文件/文件夹名称中的空格。任何人都可以帮我解决这个问题吗?

#!/bin/bash
sourcenode=$1
destnode=$2
path1=/root/test
tmp=/tmp/file-list

ssh root@"${sourcenode}" "find ${path1} -exec stat -c '%a %n' {} \; " > $tmp
cat $tmp | ssh root@"${destnode}" 'cat - > /tmp/file-list '
ssh root@"${destnode}"  cat $tmp |
while read perm path
do
    #ssh root@"${destnode}" chmod $perm $path
    chmod $perm $path
done

1 个答案:

答案 0 :(得分:0)

这里的问题是你尝试直接通过ssh运行bash代码。您无需将文件列表复制到目标,因为您在运行脚本的主机上拥有所需的所有信息。

关于文件名空间问题,我用sed处理它,用':'替换权限和文件之间的空格,然后在while循环中设置适当的IFS(字段分隔符):

#!/bin/bash
sourcenode=$1
destnode=$2

path1=/root/test
tmp=/tmp/file-list

ssh root@$sourcenode \
        "find $path1 -exec stat -c '%a %n' {} \; | sed -e 's/^\([0-9]*\) \(.*\)$/\1:\2/'" > $tmp
while IFS=$':' read perm path; do
    ssh root@$destnode chmod $perm $path
done < $tmp