Что это, Вы пытаетесь сделать? Я вид сомнения там является готовым инструментом, чтобы сделать это, но существую несколько платформ, которые возможно позволяют Вам создать то, что Вы ищете (с небольшим изучением, небольшой работой и надо надеяться некоторой забавой).
В зависимости от Ваших предпочтений и предварительных знаний, один или другие из них могло бы быть полезно для Вас:
Обработка, "язык программирования с открытым исходным кодом и среда для людей, которые хотят создать изображения, анимации и взаимодействия"; подобный Java.
Если Вы предпочитаете C++, взглянули на openFrameworks, "инструментарий C++ с открытым исходным кодом для творческого кодирования" (который может встроить Lua).
И существуют Чистые Данные, "графическая среда программирования в реальном времени для аудио, видео и графической обработки", которая с GEM также допускает вывод графических данных (см. эту flossmanual часть).
Существует также Зола, "разработанная сообществом, свободная и библиотека с открытым исходным кодом для профессионального качества творческое кодирование в C++", который, кажется, не имеет поддержку Linux, хотя (шикают ого-го),
Существует намного больше проектов как они (например, если Ваша вещь Python, я сомневаюсь, там не был сделан что-то похожее с Python), просто взгляните в этой нише.
Из Вашего комментария я советовал бы другому способу заняться проблемой: Используйте разделенный вниз рабочий стол X11 с простым менеджером окон (или ни один вообще, с помощью geometry
настройки) и инструменты для различных задач, например.
И внимательно рассмотрите в Webconverger. Если у Вас есть деньги для расходов, посмотрите на Неон Webconverger. (Мог бы быть намного больше для высказывания о цифровых решениях для обозначения, но я только знаю об этом.)
Stdin недоступен для ваших удаленных команд. Что вы можете сделать, так это использовать флаг "-s" в bash для чтения команд из stdin:
Из руководства по bash:
-s If the -s option is present, or if no arguments remain after
option processing, then commands are read from the standard
input. This option allows the positional parameters to be set
when invoking an interactive shell.
Так что это должно сделать то, что вы хотите:
#!/bin/bash
#input server names line by line in server.txt
cat server.txt | while read line
do
sshpass -p password ssh root@$line bash -s << EOF
hostname
uname -r
EOF
done
См. также: https://stackoverflow.com/questions/305035/how-to-use-ssh-to-run-shell-script-on-a-remote-machine
] Используйте следующий код, [
] [#!/bin/bash
#input server names line by line in server.txt
cat server.txt | while read line
do
sshpass -p password ssh root@$line 'hostname;uname -r'
done
] ]Если ваши хосты хранятся следующим образом в []server.txt[
] [
host1.tld
host2.tld
....
]
[]Вы можете[
] [mapfile -t myhosts < server.txt; for host in "${myhosts[@]}"; do ssh username@"$host" 'hostname;uname -r'; done
] Я не могу сказать вам, почему вы не получаете ожидаемый результат от команд hostname
и uname
, но я могу помочь с посторонний текст.
Строки «Псевдотерминала» печатаются ssh
, потому что он пытается выделить TTY по умолчанию, когда в командной строке не было задано никаких команд для выполнения. Вы можете избежать этого сообщения, добавив «-T» к команде ssh:
sshpass -p password ssh -T root@$line
Строка «Предупреждение: нет доступа к tty» не поступает из оболочки удаленной системы. csh
и tcsh
при определенных обстоятельствах распечатает это сообщение. Возможно, это вызвано чем-то в .cshrc
или подобном файле в удаленной системе, пытаясь получить доступ к какой-либо функции, для которой требуется TTY.
Я полагаю, что ssh в это время съедает остаток на stdin. Вы можете обратиться к FAQ 89 Bash для подробностей. При использовании FileDescriptor следующие коды должны работать, как вы ожидаете.
while read line <& 7
do
sshpass -p password ssh root@$line << EOF
hostname
uname -r
EOF
done 7< server.txt
Это отлично работает для меня:
# cat hostsname.txt
operation01 172.20.68.37 5fDviDEwew
ngx-gw01 172.20.68.36 FiPp2UpRyu
gateway01 172.20.68.35 KeMbe57zzb
vehicle01 172.20.68.34 FElJ3ArM0m
# cat hostsname.txt | while read hostname ipaddr passwd; do sshpass -p $passwd /usr/bin/ssh-copy-id $ipaddr;done
обратите внимание, что используйте -t -t
вместо -T
, чтобы избежать ошибки.
Псевдотерминал не будет выделен, потому что stdin не является терминалом