如何在不创build文件的情况下执行shell脚本

如何在不创build文件的情况下执行shell脚本? 例如,假设我有以下脚本( testscript ):

 #!/bin/bash function run_free() { free -m } run_free 

那么我当然可以执行这个: sh testscript

我想创build一个文件,但卵形。 我试过了:

sh echo '#!/bin/bash function run_free() { free -m } run_free'

哪个没用 有任何想法吗?

大多数解释器都有一个参数来指定一些代码来执行。 你可以用它来调用特定的解释器并提供代码。 例如:

 bash -c 'function run_free() { free -m; }; run_free' 

(注意,因为没有换行符,所以你需要一些分号。)

perl使用-epython使用-c

你好,我听说你喜欢shell,所以我把shell放在你的shell里,所以可以shell,而你的shell。

换句话说,你正在为你的echo命令产生一个shell,然后在一行中回显所有内容。 Shell将其解释为只是一个回显命令。 即使没有,一切都在一行(尤其是#!/bin/bash之后没有新行)的事实会导致问题。

在input这个回复时,我从你的评论中发现你将通过ssh运行命令。 那么这样的事情应该工作:

 ssh your_user@yourserver "function run_free() { free -m } run_free" 

您可以在这里使用文档来提供SSH脚本:

 ssh -T myhost <<EOF hostname whoami uptime EOF 

'-T'选项禁用TTY分配。

我使用这种技术在我们的第三方服务之一的多个用户帐户上运行标准脚本,该服务不允许通常可访问的可写bin目录。 SSH here-document方法避免了在多个帐户之间复制(和维护)相同的脚本的需要。

您可以在ssh发起系统上创build脚本,并将它们传送到ssh会话中

 ssh [email protected] /bin/bash <local.script 

把你的例子放在一个本地脚本run_free中

 ssh somehost.tld /bin/bash <run_free Pseudo-terminal will not be allocated because stdin is not a terminal. total used free shared buffers cached Mem: 371 246 124 0 49 80 -/+ buffers/cache: 116 254 Swap: 767 0 767 

在远程主机上运行本地脚本。

你可以用perl做同样的事情

 ssh [email protected] /usr/bin/perl <perl.script