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

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

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

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

run_free

然后我当然可以使用以下命令执行此操作:sh testscript

但我想避免创建文件。我试过:

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

这不起作用。有什么想法吗?

答案1

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

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

(请注意,由于没有换行符,因此需要一些分号。)

perl用途-e,以及python用途-c

答案2

您可以使用此处的文档来提供 SSH 脚本:

ssh -T myhost <<EOF
hostname
whoami
uptime
EOF

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

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

答案3

哟,伙计,我听说你喜欢贝壳,所以我把贝壳放在你的贝壳里,这样你剥壳的时候我也可以剥壳。

换句话说,您为echo命令生成了一个 shell,然后将所有内容都回显在一行中。Shell 会将其解释为一个 echo 命令。即使不是这样,所有内容都在一行中(尤其是在 之后没有换行符#!/bin/bash)这一事实也会导致问题。

在输入此回复时,我从您的评论中发现您将通过 ssh 运行命令。然后类似这样的操作应该可以工作:

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

答案4

如果我正确理解了问题,那么你已经非常接近了,但是sh echo '#!/bin/bash一开始输入字符串是不必要的。

我已经在 Ubuntu 20.04、bash 版本 5.0.17 中尝试了您的代码。我所做的只是在终端中启动打印功能:

在此处输入图片描述

@mgorven 的答案是可以的,但是不允许多行代码,如果代码行很长,这可能会很不方便。

相关内容