Можно ли напечатать и выполнить сценарий оболочки без сохранения в виде файла? - PullRequest
1 голос
/ 28 июня 2019

Я хочу напечатать скрипт в нечто вроде heredoc и выполнить его без предварительной записи в файл.

Я использую микроконтроллер Teensy3.2 с подключенной SD-картой для автоматического ввода некоторых повторяющихся задач (например,макро клавиатура USB).

Почему?У меня есть компьютеры, на которых постоянные изменения файловой системы / запоминающие устройства запрещены, и у меня есть повторяющиеся задачи, которые выигрывают от сценариев оболочки.

Но я нахожу это настолько полезным, что я хотел бы загружать неизмененные сценарии оболочкина SD-карту и выполнить их.Подростки могут только печатать их (без массовой памяти).Для их ввода в файл требуется, чтобы они были сохранены в файловой системе и получили разрешение на выполнение, прежде чем они могут быть выполнены и в конечном итоге удалены.

Я не очень доволен этим.Это кажется немного странным, и мне не нравится автоматизировать удаление файлов с помощью «макроса клавиатуры».

Я пробовал ssh << EOF и т. Д. ... // но разные компьютеры требуют разные пароли, которые не 'Он хранится в (неизмененных) сценариях, а ssh запрашивает пароли, и мне не разрешено изменять эту конфигурацию. </p>

Я также пробовал exec << EOF и т. д., но я не понимаюповедение, так как это убивает мою оболочку, когда закончено (что пугает меня). </p>

В основном я хочу:

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

Было бы лучше просто открыть подоболочку и набрать каждую строкускрипт?Если это так, я бы просто:

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

Я хотел бы иметь возможность добавлять сценарии на SD-карту и иметь их доступными для ввода и выполнения «на лету» без внесения изменений в файловую систему.

1 Ответ

1 голос
/ 14 июля 2019

Если его необходимо запустить в текущем процессе оболочки, вы можете получить его.

Keyboard.print(". /dev/fd/0 << 'EOF'");
while (sdcardScriptFile.available()) {
  Keyboard.write(sdcardScriptFile.read());
}
Keyboard.print("EOF");
...