AFAIK они предоставляют свою собственную реализацию OpenGL с драйверами, так что она уже должна быть установлена.
Однако перед установкой драйверов у вас должна была быть другая реализация с открытым исходным кодом, скорее всего Mesa.
Совет: мне никогда в жизни не приходилось устанавливать OpenGL в явном виде.
Похоже, вы ищете петлю:
for remote in two three four; do
ez ssh "$remote" <<'END_SSH'
script
goes here
END_SSH
done
Здесь -документ — это просто документ, как и файл, перенаправленный в команду. Если у вас есть вызов функции в файле, который вы перенаправляете, а не в документе здесь -, то определение функции должно быть доступно в той же самой среде выполнения, чтобы вы могли ее вызвать. То же самое относится и к вызову функции в документе здесь -.
Определение функции в локальной оболочке не делает ее доступной для вызова на удаленной машине через ssh
.
Две строки
STATUS=$((git status) 2>&1)
echo $STATUS
можно упростить до одной строки
git status 2>&1
Таким образом, ваш полный сценарий для удаленного выполнения:
cd /var/www/html && git status
... без функции.
Обратите внимание на &&
между командами cd
и git
. Он останавливает вызов git
в случае сбоя cd
. Это распространенный способ защиты от случайного запуска команды, если нужный каталог не существует (из-за непредвиденных обстоятельств ). Вы можете дополнительно сообщить об отсутствующем каталоге /var/www/html
в сценарии.
Я также удалил объединение двух выходных потоков. Это позволяет вам делать это в вызывающей оболочке или обрабатывать их отдельно, если вы того пожелаете.
Предполагая, что ez ssh
вызывает оболочку (, возможно, удаленно, поскольку ssh предлагает )разобрать этот код на своем стандартном вводе и что эта оболочка такая же, как та, которая интерпретирует скрипт (и работает в той же локали )и что это либо ksh, bash или zsh (для поддержки typeset -f
), вы можете сделать:
ez ssh two << EOSSH
$(typeset -f gitpull)
gitpull
EOSSH
То есть передать определение этой gitpull
функции оболочке, которую вызывает ez ssh
перед ее вызовом.Или с помощьюzsh
:
ez ssh two << EOSSH
$functions[gitpull]
EOSSH
Или, конечно, можно:
gitpull='
cd /var/www/html
STATUS=$((git status) 2>&1)
echo $STATUS
'
ez ssh two << EOSSH
$gitpull
EOSSH
или
printf '%s\n' "$gitpull" | ez ssh two
Другие подходы могут заключаться в использовании циклов, как уже предлагалось, или в:
ez_ssh_gitpull() {
ez ssh "$@" << 'EOSSH'
cd /var/www/html
STATUS=$((git status) 2>&1)
echo $STATUS
EOSSH
}
ez_ssh_gitpull two
ez_ssh_gitpull three
create a function outside of a heredoc and call it from within a heredoc, is this possible?
Ну, кажется, при условии, что вы не цитируете слово "здесь -документ" и используете "подстановку команд":
gitpull () { echo $1; }
cat << 'EOF'
$(gitpull T1)
EOF
$(gitpull ARG1) <--- output of `cat`
cat << EOF
$(gitpull ARG1)
EOF
ARG1 <--- output of `cat`