从本地计算机

时间:2018-02-05 01:30:18

标签: bash shell ssh remote-server

我在机器上有一个远程脚本(B),当我从机器(B)运行它时,它可以正常工作。我想使用:

从机器(A)通过ssh运行脚本
ssh usersm@${RHOST} './product/2018/requests/inbound/delDup.sh'

但是,机器(A)抱怨远程脚本的内容(2018req * .txt是在脚本开头定义的变量):

ls: cannot access 2018req*.txt: No such file or directory

2 个答案:

答案 0 :(得分:3)

从提供的信息来看,除了猜测之外,很难做到。所以这里有一个猜测:当您直接在机器B上运行脚本时,是使用./product/2018/requests/inbound/delDup.sh从主目录运行脚本,还是将cd运行到product / 2018 / requests / inbound目录并运行它与./delDup.sh?如果是这样,使用2018req*.txt会在不同的地方看到;基本上,它会查看运行脚本时所在的目录。如果您cd在本地编辑入站目录,它将会在那里查看,但远程运行它不会更改到该目录,因此2018req*.txt将在主目录中查找文件。

如果这是问题,我会将脚本重写到cd到相应的目录,或者通过直接在脚本中硬编码绝对路径,或者通过检测脚本所在的目录(参见{{ 3}}和"https://stackoverflow.com/questions/59895/getting-the-source-directory-of-a-bash-script-from-within")。

顺便说一句,无论何时在脚本中使用cd,都应该测试cd命令的退出状态以确保它成功,因为如果没有,脚本的其余部分将执行在错误的地方,可能会做出意外和不愉快的事情。如果失败,您可以使用||运行错误处理程序,如下所示:

cd somedir || {
    echo "Cannot cd to somedir" >&2
    exit 1
}

如果这不是问题,请提供有关脚本及其运行情况(即文件位置)的更多信息。最好的办法是显示问题的BashFAQ #28: "How do I determine the location of my script? I want to read some config files from the same place"。基本上,制作脚本的副本,删除与问题无关的所有内容,确保它仍然存在问题(否则您删除了 相关的内容),然后添加(和文件)地点)问题。

答案 1 :(得分:0)

首先,当您使用SSH时,远程计算机/ stdout服务器将数据发送回监视器,而不是直接将输出(stderrssh)发送到监视器。从中启动ssh连接的计算机。在本地计算机上运行的ssh客户端只会显示它(当然,除非您重定向它)。

现在,根据您提供的信息,看起来这些文件不在服务器(B)上或不可访问(最后但并非最不重要,您确定ls定位到正确的目录吗?)您可以在运行ls命令之前显示脚本中的当前目录以进行调试。