1

我想将脚本输入到类似 heredoc 的内容中并在不先写入文件的情况下执行它。

我使用带有 SD 卡的 Teensy3.2 微控制器来自动输入一些重复性任务(如 USB 宏键盘)。

为什么?我的计算机上不允许永久文件系统更改/大容量存储设备,并且我有重复性任务,这些任务可以从 shell 脚本中受益。

但是,我发现这非常有用,我想将未修改的 shell 脚本加载到 SD 卡上并执行它们。青少年只能把它们打出来(没有大容量存储)。将它们输入文件需要将它们保存到文件系统并授予执行权限,然后才能执行并最终删除它们。

我对此并不满意。这似乎有点 hacky,我不喜欢使用“键盘宏”自动删除文件。

我已经尝试过 ssh << EOF 等... // 但不同的计算机需要不同的密码,这些密码未存储在(未修改的)脚本中,并且 ssh 会提示输入密码,并且不允许我更改此配置。

我也尝试过 exec << EOF 等...但我不明白这种行为,因为它在完成时会杀死我的外壳(这让我害怕)。

基本上我想:

Keyboard.print("exec << 'EOF'");
while (sdcardScriptFile.available()) {
  Keyboard.write(sdcardScriptFile.read());
}
Keyboard.print("EOF");

只打开一个子shell并输入脚本的每一行会更好吗?如果是这样,我会:

Keyboard.print("(");
while (sdcardScriptFile.available()) {
  Keyboard.write(sdcardScriptFile.read());
}
Keyboard.print(")");

我希望能够将脚本添加到 SD 卡,并让它们可以“即时”键入和执行,而无需更改文件系统。

4

1 回答 1

1

如果它需要在当前的 shell 进程中运行,你可以 source 它。

Keyboard.print(". /dev/fd/0 << 'EOF'");
while (sdcardScriptFile.available()) {
  Keyboard.write(sdcardScriptFile.read());
}
Keyboard.print("EOF");
于 2019-07-14T08:52:08.490 回答