Доступ к оболочке Centos7 LXC для Ubuntu 17.04 хоста

Вот более «краткий» и лаконичный подход:

#!/bin/bash

## Read the UUIDs into the array 'uuids'. Using awk
## lets us both skip comments and only keep the UUID
mapfile -t uuids < <(awk '!/^\s*#/{print $1}' uuids.txt)

## Iterate over each UUID
for uuid in ${uuids[@]}; do
        ## Set the special array $_ (the positional parameters: $1, $2 etc)
        ## to the glob matching the UUID. This will be all file/directory
        ## names that start with this UUID.
        set -- "${source_directory}"/"${uuid}"*
        ## If no files matched the glob, no file named $1 will exist
        [[ -e "$1" ]] && echo "YES : $1" || echo  "PANIC $uuid" 
done

Обратите внимание, что, хотя вышесказанное довольно красиво и отлично работает для нескольких файлов, его скорость зависит от количества UUID и будет очень медленно, если вам нужно обрабатывать многие. Если это так, используйте либо решение @ choroba или, для чего-то действительно быстрого, избегайте оболочки и вызывайте perl:

#!/bin/bash

source_directory="."
perl -lne 'BEGIN{
            opendir(D,"'"$source_directory"'"); 
            foreach(readdir(D)){ /((.+?)_.*)/; $f{$2}=$1; }
           } 
           s/\s.*//; $f{$_} ? print "YES: $f{$_}" : print "PANIC: $_"' uuids.txt

. Чтобы проиллюстрировать разницу во времени, я опробовал свой подход bash, choroba и my perl в файле с 20000 UUID, из которых 18001 имеет соответствующее имя файла. Обратите внимание, что каждый тест выполнялся путем перенаправления вывода скрипта на /dev/null.

My bash (~ 3.5 min)
real   3m39.775s
user   1m26.083s
sys    2m13.400s
Choroba's (bash, ~ 0.7 sec)
real   0m0.732s
user   0m0.697s
sys    0m0.037s
My perl (~ 0,1 с ):
real   0m0.100s
user   0m0.093s
sys    0m0.013s
2
задан 5 October 2017 в 22:02

2 ответа

Нашел:

Для изображений CentOS: lxc exec my-container -- bash Для изображений Ubuntu: lxc shell my-container или для изображений Ubuntu: lxc exec my-container -- sudo --login --user username
2
ответ дан 18 July 2018 в 05:43

Нашел:

Для изображений CentOS: lxc exec my-container -- bash Для изображений Ubuntu: lxc shell my-container или для изображений Ubuntu: lxc exec my-container -- sudo --login --user username
2
ответ дан 24 July 2018 в 18:25

Другие вопросы по тегам:

Похожие вопросы: