Удаленная установка PIP из Python3 без корня

Вероятно, проблема с размером сектора. Некоторые корпуса USB заявляют, что их диски имеют секторы по 4 КиБ, когда диск представляет собой секторы по 512 байт или наоборот. Таблицы разделов (как msdos, так и gpt), к сожалению, зависят от размера сектора. Если размер сектора изменится, таблица разделов станет недействительной.

Это проблема, которую можно решить программно - Linux можно сделать достаточно умным, чтобы правильно интерпретировать таблицу разделов GPT, независимо от размера физического сектора, который, по утверждениям, имеет диск. Но он этого не делает и, вероятно, не является частью стандарта, поэтому ...

Что вам нужно сделать, так это получить точные байтовые смещения ваших разделов при закрытии USB

parted /dev/usbdrive unit b print free

, а затем посмотреть, эти смещения разделов работают для внутреннего диска

losetup --find --show --read-only --offset 1048576 /dev/internaldrive
file -s /dev/loopX

, и если это сработает, заново создайте таблицу разделов с такими же (байтовыми) смещениями для внутреннего диска (сначала сделайте резервную копию первых / последних нескольких мегабайт диска )

parted /dev/internaldisk unit b mklabel gpt mkpart 1048576 42424242 ...

Я не знаю, существует ли разделитель, который достаточно умен, чтобы «восстанавливать» такие таблицы разделов с неправильным размером сектора автоматически. Это лучше ручного подхода, но ...

7
23.07.2018, 19:24
4 ответа

Использовать поток с и или:

sudo./list_members Physicians | sed 's/^/Physicians /'

Чтобы сделать ее вспомогательной функцией, вы можете предпочесть awk, хотя:

prefix() { P="$*" awk '{print ENVIRON["P"] $0}'; }

sudo./list_members Physicians | prefix 'Physicians '

Если вы хотите использовать префикс как для stdout, так и для stderr, это можно сделать с помощью:

{
  sudo./list_members Physicians 2>&1 >&3 3>&- |
   prefix 'Physicians ' >&2 3>&-
} 3>&1 | prefix 'Physicians '
8
27.01.2020, 20:14

Я предлагаю вам использовать утилиту tsиз пакета moreutils. Хотя его основной целью является добавление к выходным строкам метки времени, он может использовать произвольную строку вместе с меткой времени или вместо нее

.
for line in {01..05}; do echo $line; done | ts  "A string in front "
A string in front  01
A string in front  02
A string in front  03
A string in front  04
A string in front  05
10
27.01.2020, 20:14

Вы также можете сделать это с помощьюawk:

$ sudo./list_members | awk '{print "Physicians "$0}'
Physicians user@domain.com
Physicians user2@domain.com
Physicians user3@domain.com
Physicians user4@domain.com

Или сxargs:

$ sudo./list_members | xargs -n1  echo 'Physician'

Если вы знаете, что ваш ./list_membersбудет включать более 1 аргумента, вы можете использовать этот xargs, который вместо этого разделяет входные данные на \n:

$ sudo./list_members | xargs -n1 -d $'\n' echo 'Physician'
Physician user@domain.com xxx
Physician user2@domain.com yyy
Physician user3@domain.com zzz
Physician user4@domain.com aaa
4
27.01.2020, 20:14

Использование оболочки Bourne (или BASH, который является расширенным набором ), позволит сохранить решение на 100% POSIX:

sudo./list_members | while read LINE; do echo "Prefix ${LINE}"; done
1
27.01.2020, 20:14

Теги

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