dede网站模板,wordpress怎么调用m3u8视频,wordpress 需要用什么空间,重庆工程招标网站有哪些文章目录 在Shell脚本中通过ssh从脚本运行函数declare -f 和typset -f#xff0c;这两个命令有什么区别declare -f 和typset -f#xff0c;这两个命令可以通过ssh运行脚本中的函数吗如果我有main.sh和util.sh#xff0c;并且在main.sh中引用了util.sh#xff0c;该怎么办这两个命令有什么区别declare -f 和typset -f这两个命令可以通过ssh运行脚本中的函数吗如果我有main.sh和util.sh并且在main.sh中引用了util.sh该怎么办 我应该如何通过ssh执行main.sh而不将utils.sh复制到远程计算机 在Shell脚本中通过ssh从脚本运行函数
是否有任何聪明的方法可以通过ssh在远程主机上运行本地Bash功能 例如
#!/bin/bash
#Definition of the function
f () { ls -l; }#I want to use the function locally
f#Execution of the function on the remote machine.
ssh userhost f#Reuse of the same function on another machine.
ssh userhost2 f以上操作时行不通的我知道这行不通但是有办法实现吗 以下是相关解决方法
可以使用typeset命令通过ssh使功能在远程计算机上可用。有多个选项具体取决于您要如何运行远程脚本。
#!/bin/bash
# Define your function
myfn () { ls -l; }要在远程主机上使用该功能
typeset -f myfn | ssh userhost$(cat); myfn
typeset -f myfn | ssh userhost2$(cat); myfn更好写法如下为什么还要麻烦管道
ssh userhost$(typeset -f myfn); myfn或者您可以使用HEREDOC
ssh userhost EOF$(typeset -f myfn)myfn
EOF如果要发送脚本中定义的所有函数而不仅仅是myfn只需使用typeset -f如下所示
ssh userhost$(typeset -f); myfn说明
typeset -f myfn将显示myfn的定义。
cat将以文本形式接收该函数的定义而$()将在当前shell中执行它而该shell将成为远程shell中的已定义函数。最后该功能可以执行。
最后的代码将在ssh执行之前将函数的定义内联。 相关讨论如下 最好使用typeset -f f并且只跨发送一个函数的定义 HenkLangeveld-取决于是否有f()调用所需的函数。 在我的假设中函数f()可能需要其他函数。 否则您的建议将是最好的。 如何将一些参数传递给此函数 使用任何命令的方式相同。 如果函数是f()则可以传递f param1 param2 ...之类的参数。 在f()内部您将把参数引用为$1, $2, ... $n。 优秀的 对于Bash我使用declare -f而不是typeset -f。 谢谢。 当我使用它说 COMMAND NOT FOUND(未找到命令)之类的函数时是否定义了该函数 alvits很好。 但是如果我有main.sh和util.sh并且在main.sh中引用了util.sh该怎么办 我应该如何通过ssh执行main.sh而不将utils.sh复制到远程计算机 使用declare -f或typset -f时得到syntax error near unexpected token ; 我个人不知道您问题的正确答案但是我有很多安装脚本只是使用ssh复制自身。
让命令复制文件加载文件功能运行文件功能然后删除文件。
ssh userhostscp userotherhost:/myFile ; . myFile ; f ; rm Myfile这个方法就是相当于ssh登录远程主机后向远程主机发送myFile脚本然后执行脚本执行脚本中的f函数执行完毕后rm删除myFile脚本。
另一种方式
#!/bin/bash
# Definition of the function
foo () { ls -l; }# Use the function locally
foo# Execution of the function on the remote machine.
ssh userhost$(declare -f foo);foossh userhost$(declare -f foo);foo这个命令是一个使用 SSH 远程调用函数的例子。下面是解释 ssh 是远程登录协议允许用户在不同计算机之间进行安全的远程登录和执行命令。 userhost 是你要连接的远程主机的用户名和 IP 地址或域名。 $(declare -f foo) 是将本地函数 foo 的定义转换为字符串并传递到远程主机上执行的命令。这样可以确保在远程主机上也有 foo 函数的定义。 ; foo 在声明完函数后立即调用了函数 foo。 以下是示例代码 假设你在本地机器上定义了一个名为 hello_world 的函数并且你希望在远程主机 example.com 上执行该函数。你可以使用以下命令
ssh userexample.com $(declare -f hello_world); hello_world当你执行这个命令时它会将本地的 hello_world 函数定义作为字符串传输到远程主机并在远程主机上执行该函数。如果一切正常你应该看到输出结果 Hello, World!
declare -f 和typset -f这两个命令有什么区别
declare -f 和 type -f 都是用来查看函数定义的命令 但是它们具有不同的作用和输出形式
declare -f function_name
declare -f 命令用于显示指定函数的定义包括函数名、参数和函数体。如果没有指定函数名称则显示所有已定义的函数。
示例代码
# 定义函数
function hello() {echo Hello, world!
}# 使用 declare -f 输出函数定义
declare -f hello# 输出结果为
# hello ()
# {
# echo Hello, world!
# }# 不传递函数名称显示所有已定义的函数
declare -f
type -f function_name
type -f 命令用于显示指定函数的位置即函数所在文件的路径。
示例代码
# 定义函数
function hello() {echo Hello, world!
}# 使用 type -f 输出函数位置
type -f hello# 输出结果为hello is a function
# hello ()
# {
# echo Hello, world!
# }# 如果该函数在 bash 脚本中也可以使用 type 来查看文件位置
type -f my_script.sh
因此declare -f 和 type -f 的区别在于前者用于显示函数定义后者用于显示函数位置。 declare -f 和typset -f这两个命令可以通过ssh运行脚本中的函数吗
在Shell脚本中可以使用ssh命令从本地机器远程登录到另一台远程机器并在远程机器上执行命令或运行脚本。如果想要在远程机器上运行脚本中的函数可以通过ssh命令来实现。
在使用ssh命令远程执行命令或脚本时默认情况下不会传输环境变量或函数定义等内容。因此为了能够在远程机器上运行脚本中的函数需要将函数定义先传输到远程机器上然后再调用这些函数。declare -f和typset -f命令可以分别用于显示和导出当前Shell环境中的函数定义。
例如假设在本地机器上有一个脚本test.sh其中包含一个名为my_function的函数。现在我们想要在远程机器上运行这个函数。我们可以使用以下命令
$ ssh remote_host $(declare -f my_function); my_function该命令将首先使用declare -f my_function显示my_function函数的定义然后将其作为参数传递给ssh命令。在远程主机上该命令将首先定义my_function函数然后调用它以执行相应的操作。
类似地也可以使用typset -f命令来显示并导出当前Shell环境中的函数定义。例如
$ ssh remote_host $(typset -f my_function); my_function
需要注意的是如果函数依赖于某些环境变量或命令则需要在远程机器上设置这些环境变量或安装相应的命令才能正常运行。 如果我有main.sh和util.sh并且在main.sh中引用了util.sh该怎么办 我应该如何通过ssh执行main.sh而不将utils.sh复制到远程计算机
要在远程计算机上执行main.sh并引用本地计算机上的util.sh您可以使用SSH远程执行命令来完成此操作。具体步骤如下
在本地计算机上将util.sh压缩为tar.gz文件例如
tar -czf util.tar.gz util.sh使用scp命令将util.tar.gz文件复制到远程计算机上例如
scp util.tar.gz remoteuserremotehost:/tmp/其中remoteuser是远程计算机上的用户名remotehost是远程计算机的地址/tmp/是目标文件夹。 在远程计算机上通过ssh连接到该计算机并切换到main.sh所在的目录。 解压缩util.tar.gz文件并在main.sh中引用util.sh文件。例如
tar -xzf /tmp/util.tar.gz -C /tmp/
source /tmp/util.sh# 继续main.sh中的其他命令执行main.sh脚本。
./main.sh执行完main.sh后可以删除已解压的util.sh文件和tar.gz文件。
rm /tmp/util.sh /tmp/util.tar.gz这样就可以在不将util.sh复制到远程计算机的情况下成功运行main.sh并引用util.sh文件了。