Я пытался:
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
Но, к сожалению, это не так.