Да, потому что подстановка команд выполняется оболочкой еще до запуска xargs
. echo
в подстановке печатает литеральную строку {}
для sed
для манипулирования. sed
не вносит в него никаких изменений, и в результате xargs
видит
echo {} {}
Вместо:
echo 'abc' | xargs -I{} bash -c 'echo "$(sed "s/b/f/g" <<<"$1")" "$1"' bash {}
Здесь мы не позволяем оболочке оценивать подстановку команд, встраивая ее в -строчный скрипт. Скрипт получает аргумент командной строки(abc
)из xargs
и обрабатывает его как "$1"
.
Было бы еще лучше использовать printf
, если у вас возникла идея заменить a
тире, а другие символы на что-то, что будет интерпретироваться как опцияecho
:
echo 'abc' | xargs -I{} bash -c 'printf "%s %s\n" "$(sed "s/b/f/g" <<<"$1")" "$1"' bash {}
Или безsed
:
echo 'abc' | xargs -I{} bash -c 'printf "%s %s\n" "${1//b/f}" "$1"' bash {}
Или вы можете просто сделать это только с sed
(, по крайней мере, в этом простом примере):
echo 'abc' | sed 'h; s/b/f/g; G; s/\n/ /'
Хорошо, у меня все получилось (Думаю, )выполнив:
mdadm --assemble --scan --force
mdadm: Marking array /dev/md/1 as 'clean'
mdadm: /dev/md/1 has been started with 3 drives (out of 4).
>: cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md1 : active raid6 sdb2[0] sdd2[2] sdc2[1]
5735270400 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/3] [UUU_]
[>....................] resync = 0.0% (765440/2867635200) finish=561.7min speed=85048K/sec
bitmap: 4/22 pages [16KB], 65536KB chunk
md0 : active (auto-read-only) raid6 sdb1[0] sde1[3] sdd1[2] sdc1[1]
124932096 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/4] [UUUU]
unused devices: <none>
Теперь я подожду повторной -синхронизации и попытаюсь перезагрузить компьютер. Тем временем объем увеличивается, и я вернул свои данные!