Я хочу сделать:
echo "something" >> /etc/config_file
Но, так как только у пользователя root есть разрешение записи в этот файл, я не могу сделать этого. Но следующее также не работает.
sudo echo "something" >> /etc/config_file
Есть ли способ добавить в файл в той ситуации, не имея необходимость сначала открывать его с a sudo
'd редактор и затем добавление нового содержания вручную?
Использовать tee -a
(или tee --append
) с sudo
tee - read from standard input and write to standard output and files
[...]
-a, --append
append to the given FILEs, do not overwrite
[...]
Таким образом, Ваша команда становится
echo "something" | sudo tee -a /etc/config_file
Преимущества tee
по выполняющемуся Bash с административными полномочиями
Имейте икру sudo подоболочка:
sudo sh -c "echo 'JAVA_HOME=/usr/lib/jvm/java-6-sun' >> /etc/profile"
В этом примере sudo выполняет "sh" с остальными как аргументы.
(это показывается примером в sudo странице справочника),
Может быть проблема с sudo здесь и перенаправлением. Используйте текстовый редактор по Вашему выбору вместо этого для добавления строки.
sudo nano /etc/profile
Или, Вы могли попробовать su вместо этого
su
echo ‘JAVA_HOME=/usr/lib/jvm/java-6-sun’ >> /etc/profile
exit
Это не будет работать, Вы пытаетесь перенаправить (использование >>
) вывод sudo. То, что Вы действительно хотите сделать, перенаправить вывод echo
. Я предлагаю, чтобы Вы просто использовали своего любимого редактора и добавили ту строку вручную к /etc/profile
. Это обладает дополнительным преимуществом, которое можно проверить ли /etc/profile
уже наборы JAVA_HOME
.
Перенаправление выполняется в текущей оболочке. Чтобы сделать перенаправление с поднятыми полномочиями, необходимо выполнить саму оболочку с поднятыми полномочиями:
sudo bash -c "somecommand >> somefile"