Я не думаю, что вы легко отделаетесь без петли:
cmd=()
for i ($argv[1,-2]) cmd+=(ssh -t $i)
$cmd tailf /pathtofile/$argv[-1]/log.log
Строго говоря, поскольку это командная строка оболочки, которую вы передаете в ssh
, если вы хотите иметь возможность поддерживать произвольные значения для этих $1
, $2
, вам нужно заключить эти аргументы в кавычки и добавить дополнительный уровень цитирования для каждого ssh.
Здесь предполагается, что оболочка входа пользователя на всех хостах — Bourne -, например:
cmd=(tailf /pathtofile/$argv[-1]/log.log)
argv[-1]=()
while (($#argv)) {
cmd=(ssh -t "$argv[-1]" ${(j: :)${(qq)cmd}})
argv[-1]=()
}
Это должно заставить его работать при вызове как
that-script host1 host2 'dir with spaces and other nasty characters'
Документация, на которую вы ссылаетесь, указывает:
Warning: Downgrading packages will almost always leave you in an unsupported partial upgrade state. These instructions are intended for advanced users who understand the consequences of downgrading packages
и именно это здесь и произошло; теперь у вас есть зависимости (, вероятно, даже не glibc, а другие ), которые несовместимы с установленным вами программным обеспечением. Так что пришлось откатиться.
Как сказал А.Б.:
Nowadays, you just fire a container running older software (older gcc etc) so the host doesn't get this kind of problem. Btw, don't confuse gcc-libs, glibc2 or stdlibc++ with GLib.
Теперь на манджаро вы можете использовать docker
или podman
; оба делают одно и то же :запускают контейнеры , которые по сути являются системами Linux «в коробке», хорошо изолированными от остальной части вашей системы. podman
немного современнее и лучше работает без привилегий суперпользователя, но поддерживает те же команды и параметры, что и docker (, где это возможно ).
Например, после установки podman(sudo pacman -S podman
)вы можете запустить
podman run --name myfirstcontainer -it -v /home/maxemilian:/data:Z manjarolinux/base
и он загрузит и run
изображение манджаро , даст вам интерактивную оболочку на нем (-it
), привяжет то, что у вас есть под /home/maxemilian
как v
olume, видимый в контейнере как/data
(используя собственные владенияZ
). Ваш контейнер сохраняется после выхода (проверкиpodman ps -a
)и может быть запущен снова с помощью podman start --attach myfirstcontainer
.
Вы можете сделать даунгрейд внутри этого контейнера и ничего не трогать снаружи. Через том ваш контейнер может получить доступ к исходным файлам, которые вам нужно скомпилировать!
Очень часто компилятор distcc
запускается как "серверный" внутри контейнера. Вам нужно добавить --publish 3632
для этого, и,на вашей машине разработки (, то есть на вашем «нормальном» манджаро ), вместо использования, например. gcc
в качестве компилятора используйте distcc
.
podman run -it --publish 3632 --name buildserver manjarolinux/base #установить gcc, distcc distccd --демон
Попробуйте! Сделать файлtest.c
:
#include <stdio.h>
int main() {
printf("GCC %d.%d.%d", __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__);
return 0;
}
Выполнить
export CC=distcc
export DISTCC_HOSTS=localhost
$CC -o test test.c
./test