Восстановить нечего; mkfs.ext4
выполняет TRIM по умолчанию, если это явно не запрещено с помощью параметра nodiscard
.
nodiscard
Do not attempt to discard blocks at mkfs time.
Попробуйте на нем photorec
, если ничего не найдено (и не было задействовано шифрование), то ничего не поделаешь. Данные мертвы и ушли.
Ваша проблема заключается в кавычках, которые вы используете. Вам нужно использовать двойные кавычки, чтобы переменные внутри $@
могли быть расширены, иначе они останутся литералами и никогда не будут расширены.
$ cat runme.bash
#!/bin/bash
echo "run with double quotes"
su -c "echo $@" user1
echo "run with single quotes"
su -c 'echo $@' user1
$./runme.bash "a b c"
run with double quotes
a b c
run with single quotes
$
Вы также должны передать список аргументов в виде списка в кавычках, иначе команда su -c...
запутается и начнет анализировать 2-й аргумент как пользователя, которого вы хотите su
от имени.
$./runme.bash a b c
run with double quotes
su: user b does not exist
run with single quotes
$
Если вы хотите увидеть, что на самом деле делает скрипт, вы можете запустить его, установив переключатель -x
в положение bash
.
$ bash -x./runme.bash a b c
+ echo 'run with double quotes'
run with double quotes
+ su -c 'echo a' b c user1
su: user b does not exist
+ echo 'run with single quotes'
run with single quotes
+ su -c 'echo $@' user1
$
цитируемые аргументы $ bash -x./runme.bash "a b c"
+ echo 'run with double quotes'
run with double quotes
+ su -c 'echo a b c' user1
a b c
+ echo 'run with single quotes'
run with single quotes
+ su -c 'echo $@' user1
$
Вы можете рассмотреть возможность передачи позиционных параметров оболочки команде su
в качестве аргументов, а не полагаться на их правильное раскрытие в строке аргументов -c
.
Например:
#!/bin/sh
su testuser -c 'for arg; do echo "$0 ($(whoami)): $arg"; done' -- su "$@"
, затем
$./suscript foo "bar baz"
Password:
su (testuser): foo
su (testuser): bar baz
Инкапсуляция команды внутри блока документации здесь -может вам помочь.
#!/bin/sh
su testuser -s /bin/sh <<EOF
add_container_host.py "$@"
EOF
Вы также можете попробовать, как показано ниже
su testuser -c 'add_container_host.py "$@"' -- argv0 "$@"
Помимо этого su -exec также является хорошей альтернативой.