在函数内调用函数

在函数内调用函数

我正在使用该函数通过 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,如果找不到匹配的程序,则会抛出您看到的错误。

三种可能的解决方案:

  1. 将此文档的主体包含operations()在您此处的文档中,不要担心函数,因为您已经找到了作品。
  2. 在您的此处文档中包含完整的定义operations()。我不确定在这种特定情况下,这是否会比选项 1 更有帮助,但在较长的脚本中或如果您重复使用operations()它,可能会更有帮助。
  3. 将定义添加operations()到远程计算机上的 .bashrc 或类似的自动加载文件中。这意味着您可以在此处从脚本中删除定义。

相关内容