在当前工作目录中查找文件。此命令在Shell脚本中不起作用

时间:2018-10-02 16:19:51

标签: shell

以下脚本有助于检查ssh对当前用户的访问权限,还可以在当前工作目录中查找文件。

#!/bin/sh
if [ $# -eq 0 ]
then
echo "Provide input file containing list of machine names"
elif [ -f $1 ]
then
    for host in $(cat $1)
    do
      status=$(ssh -o BatchMode=yes -o ConnectTimeout=5 $host echo ok 2>&1) # successful ssh prints ok in the status variable
      # echo $status
      if [ "$status" == "ok" ]
      then
        echo "In"
         result=$(find /home/hkc -name "findme.txt") # Command not working from script, whereas its working from command prompt
        # result=$(find . -print | grep -i findme)
        echo $result
      else
        echo $status
      fi
    done
else
   echo "File not found"
fi

预期o / p:

find . -name "find*"

./findme.txt
./find.txt

实际o / p:

hkc@client ~]$ ./ssh_access.sh machine_names.txt 

In
find: ‘/home/hkc/Downloads/copy_docu/newdir3’: Permission denied
find: ‘/home/hkc/Downloads/copy_docu/newdir4’: Permission denied
find: ‘/home/hkc/Downloads/copy_docu/tmp’: Permission denied

该命令无法找到文件。请帮助我找到错误。

1 个答案:

答案 0 :(得分:0)

您似乎在本地计算机和远程计算机上都有一个/home/hkc。您希望find /home/hkc -name "findme.txt"在远程主机上执行,但是实际上,它不在本地主机上执行。

在您的代码中,您的ssh会话实际上以以下行开始和结束:

status=$(ssh -o BatchMode=yes -o ConnectTimeout=5 $host echo ok 2>&1)

您的本地脚本仍在处理下一行(if ...)。

所以,我建议您更改:

result=$(find /home/hkc -name "findme.txt")

具有:

result=$(ssh -o BatchMode=yes -o ConnectTimeout=5 "$host" "find /home/hkc -name findme.txt" 2>&1)

(顺便说一句,除非您知道自己在做什么,否则总是引用变量!=> "$host",而不是$host