我在机器上有一个远程脚本(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
答案 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
服务器将数据发送回监视器,而不是直接将输出(stderr
和ssh
)发送到监视器。从中启动ssh
连接的计算机。在本地计算机上运行的ssh
客户端只会显示它(当然,除非您重定向它)。
现在,根据您提供的信息,看起来这些文件不在服务器(B)上或不可访问(最后但并非最不重要,您确定ls
定位到正确的目录吗?)您可以在运行ls
命令之前显示脚本中的当前目录以进行调试。