Назад | Перейти на главную страницу

Как добавить строку в конец файла, к которому я могу получить доступ через sudo?

Я пытался:

sudo "some string" >> test.txt

Но я получаю предупреждение об отказе в разрешении.

Кто-нибудь может помочь?

% echo "string" | sudo tee -a test.txt
sudo bash -c "echo 'some string' >> test.txt"

Проблема в вашей исходной попытке состоит в том, что ">>" происходит в оболочке, запущенной как вы; bash открывает файл, а не все, что запущено sudo. В моей версии вы передаете всю команду, включая перенаправление на bash, запускаемое sudo.

Зависит от того, какой доступ ваш администратор предоставил вам через sudo. Самый простой ответ, при условии, что у вас есть на это разрешение, - запустить «sudo -s», чтобы получить привилегированную оболочку, а затем просто выполнить свою

echo somestring >> test.txt

как обычно'. Если вам нужно сделать это автоматически:

sudo /bin/sh -c 'echo somestring >> test.txt'

Причина, по которой то, что у вас есть, не будет работать (кроме того факта, что вы оставили то, что я предполагаю как команду "echo"), заключается в том, что перенаправление файла происходит в контексте вашей оболочки, а sudo применяется только к команде ты сказал ему бежать.

Можешь попробовать бывший-путь:

sudo ex +'$put =\"some string\"' -cwq foo.txt

Это простое редактирование файлов на месте, которое полезно в сценариях, поэтому вам не нужно делать какие-либо конвейеры оболочки.

Многие рекомендуют tee для этого, но мне не нравится побочный эффект написания stdout. Альтернативой является cat:

sh some_script.sh | sudo sh -c 'cat >> somefile.txt'

Если cat был аргумент вроде teeс -a flag, это было бы немного удобнее:

sh some_script.sh | sudo pseudocat -a somefile.txt

Но, к сожалению, это не так.