Вход:
sudo bash -c '>> /media/$USER/rootfs/etc/profile'
Выход:
bash: /media/root/rootfs/etc/profile: No such file or directory
Вход:
TEST=$USER
sudo bash -c '>> /media/$TEST/rootfs/etc/profile'
Выход:
bash: /media//rootfs/etc/profile: No such file or directory
Вместо:
/media/riccardo/rootfs/etc/profile
Как решить эту проблему?
решение1
По умолчанию переменные оболочки не экспортируются в команды, запускаемые из оболочки.
Вам нужно явно сделать это с помощью export
, например:
$ export test=foo
$ bash -c 'echo test=$test'
test=foo
За исключением того, что это sudo
все равно может очистить среду перед передачей ее в bash
, поэтому вам может потребоваться вместо этого использовать аргументы командной строки:
$ test=foobar
$ sudo bash -c 'echo "$1"' sudo_bash "$test"
foobar
Здесь в этом нет необходимости export
, sudo_bash
это просто строка, которая используется как «имя» этой внутренней оболочки, вы бы увидели это, если бы строка -c
содержала, например, синтаксическую ошибку.
Смотрите также:
решение2
Проблемы с цитированием
sudo bash -c '>> /media/'"$USER"'/rootfs/etc/profile'
test=$USER
sudo bash -c '>> /media/'"$test"'/rootfs/etc/profile'
''
Кавычки — это литералы, ""
кавычки позволяют расширять переменные. Я использовал оба, объединяя их вместе. Это также сработало бы, если бы я использовал только ""
.