Используйте dash in printf

Я не уверен, что это точно - или даже близко - то, что вы хотите, но вы можете использовать DRBD на экспортированной iscsi ZFS zvol. На самом деле, вам даже не нужно DRBD для этого, вы можете просто экспортировать два zvol с двух разных серверов ZFS с помощью iscsi и сделать linux mdadm raid устройство с ними в целевой системе.

Существует дополнительный модуль для системы управления виртуальными машинами компании Google ganeti , предназначенный для этого с DRBD и ZFS zvols по адресу https://github.com/ffzg/ganeti-extstorage-zfs , который может служить полезным примером того, как это сделать. Ganeti уже делает что-то подобное с LVM и DRBD, поэтому это просто расширяет возможности для включения ZFS.

btrfs не имеет zvols или что-либо эквивалентное, поэтому AFAIK не может делать с btrfs.

-121--116192-

Используйте find :

Когда вы говорите не рекурсивно, вы имеете в виду, что вы хотите только количество файлов/каталогов в/home, но не подкаталоги? В этом случае можно ограничить результаты до верхнего уровня с помощью опции maxdepth .

find /home -maxdepth 1 | wc -l

Использование для:

i=0; for home in ~/*; do (( i++ )); done; echo $i

Запишите места между двойными скобками и заключенными i++.

-121--105130-

Команды в каждой группе выполняются параллельно, а группы выполняются последовательно, каждая группа параллельных команд ожидает завершения предыдущей группы перед началом выполнения.

Ниже приведен рабочий пример:

Используйте 3 группы команд, как в приведенном ниже коде. В каждой группе три команды запускаются в фоновом режиме с помощью и .

Команды 3 запускаются почти одновременно и выполняются параллельно, в то время как сценарий ожидает завершения .

После завершения всех трех команд в третьей группе будет выполнена команда 10 .

$ cat command_groups.sh 
#!/bin/sh

command() {
    echo $1 start
    sleep $(( $1 & 03 ))      # keep the seconds value within 0-3
    echo $1 complete
}

echo First Group:
command 1 &
command 2 &
command 3 &
wait

echo Second Group:
command 4 &
command 5 &
command 6 &
wait

echo Third Group:
command 7 &
command 8 &
command 9 &
wait

echo Not really a group, no need for background/wait:
command 10

$ sh command_groups.sh 
First Group:
1 start
2 start
3 start
1 complete
2 complete
3 complete
Second Group:
4 start
5 start
6 start
4 complete
5 complete
6 complete
Third Group:
7 start
8 start
9 start
8 complete
9 complete
7 complete
Not really a group, no need for background/wait:
10 start
10 complete
$   

0
25.07.2018, 17:02
3 ответа

Вы можете использовать аргумент end of options (--), чтобы printfинтерпретировать тире буквально:

printf -v var -- '-x=%s' "$x"

Выход:

$ x=xxx && printf -v var -- '-x=%s' "$x" && echo $var
-x=xxx
3
28.01.2020, 02:13

printf поддерживает обычный аргумент end -of -options--:

$ printf -- '-x\n'
-x
7
28.01.2020, 02:13

Поскольку ваш printf, похоже, принимает параметры, используйте строку формата для вывода как -x, так и значения переменной:

printf '%s=%s' '-x' "$x"

Чтобы вызвать инструмент с предварительно -сгенерированной командной строкой, не помещайте аргументы командной строки в строку. Используйте setдля установки значений $@вместо :

.
set -- -x="$x" -y="$y" -z="$z"

Затем вызовите инструмент:

tool "$@"

Это гарантирует, что инструмент получит правильное количество аргументов, правильно заключенных в кавычки, даже если одно или несколько значений $x, $yили $zсодержат пробелы.

Или, используя массив bash:

args=( -x="$x" -y="$y" -z="$z" )

tool "${args[@]}"
2
28.01.2020, 02:13

Теги

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