Я хочу создать файл с содержимым в защищенном от записи каталоге. Я не знаю, почему там написано line 24: sudo: Permission denied. Пожалуйста, просмотрите мой код.

echo $(wget -q -O - "$SOURCE") > sudo "$FILE";

Проверено на Ubuntu.

-1
Arghadip 2 Мар 2021 в 07:22

1 ответ

Лучший ответ

Этот код говорит: «Запишите вывод wget и $ FILE в файл с именем sudo в текущем каталоге».

Ошибка №1: > говорит записать в файл. Вы хотели подключиться к sudo.

Это вызвало ошибку. Вы не используете sudo, вы пишете файл с именем sudo. (В разрешении отказано, потому что у текущего пользователя нет разрешения.)

Ошибка № 2: sudo command выполняет команду. Вы написали sudo $(FILE). Это будет означать выполнить $(FILE).

Ошибка № 3: $(wget ...) будет выполнять разделение аргументов оболочки и т. Д. В полученном вами документе. А если полученный документ окажется слишком длинным, вы переполните буфер командной строки. Наверное, не так.

Вот что бы я сделал:

wget -q -O - "$SOURCE" | sudo tee "$FILE" > /dev/null

Вы также можете использовать dd -of="$FILE" вместо tee "$FILE". > /dev/null - это подавить все, что записывается в стандартный вывод с помощью dd или tee.

Обратите внимание, что следующее не сработает. Синтаксический анализ и перенаправление команд выполняется непривилегированной пользовательской оболочкой. У него нет разрешения на открытие $(FILE) ...

# Simpler but incorrect
wget -q -O - "$SOURCE" | sudo cat > "$FILE"

Предупреждение: ничего из вышеперечисленного не проверено !!

0
Stephen C 2 Мар 2021 в 06:26