我正在使用该函数通过 ssh 连接到服务器connect6
,然后我必须operations
从函数内部调用该函数connect6
并进一步运行其命令。
如果我将所有operation
函数命令放入connect6
函数中,我就会得到所需的输出,否则我会收到错误:No file or directory
。
connect6 () {
ssh -q [email protected] << EOF
if [ $? -eq 0 ]; then
echo "Successfully Logged into the Server"
else
echo "Check your credentials"
exit
fi
$(operations)
EOF
}
operations(){
cd /var/dist/test/
sudo ./o
echo "line 2 line 3" | sudo tee -a test.323
sudo ./c
}
谢谢
答案1
该operations()
函数在您的本地 shell 中定义。
此处文档中的内容将被传递到远程 shell 的标准输入。
由于您的本地 shell 和远程 shell 是两个不同的进程,这基本上意味着您正在要求远程 shell 运行您从未告诉过它的函数。由于它不知道名为 的函数或别名operations
,因此它会回退到搜索您的(远程)PATH
,如果找不到匹配的程序,则会抛出您看到的错误。
三种可能的解决方案:
- 将此文档的主体包含
operations()
在您此处的文档中,不要担心函数,因为您已经找到了作品。 - 在您的此处文档中包含完整的定义
operations()
。我不确定在这种特定情况下,这是否会比选项 1 更有帮助,但在较长的脚本中或如果您重复使用operations()
它,可能会更有帮助。 - 将定义添加
operations()
到远程计算机上的 .bashrc 或类似的自动加载文件中。这意味着您可以在此处从脚本中删除定义。