Подтвердить что ты не робот

Sudo cat <<EOF> Файл не работает, sudo su делает

Я попробовал следующее в командной строке в bash:

sudo cat << EOF > /etc/yum.repos.d/some-name.repo
#Content
#....
#...
EOF

Он жаловался:

-bash: /etc/yum.repos.d/some-name.repo: Permission denied

Тогда я сделал sudo su и попробовал то же самое, кроме sudo до cat, и он работал без каких-либо проблем. Что мне не хватает в приведенном выше?

4b9b3361

Ответ 1

Перенаправление вывода (например, > ) выполняется bash, а не cat, во время работы с вашим UID. Для запуска с использованием корневого UID используйте sudo:

sudo bash -c 'cat << EOF > /etc/yum.repos.d/some-name.repo
line1
line2
line3
EOF'

Ответ 2

Другой вариант - tee.

cat << EOF | sudo tee -a /etc/yum.repos.d/some-name.repo
...
EOF

Ответ 3

Как вариант для @Yuriy Nazarov, ответьте, только пропускная способность канала должна быть увеличена до sudo. Входной канал может оставаться неровным:

sudo bash -c 'cat > /etc/yum.repos.d/some-name.repo' << EOF
line1
line2
line3
EOF

Это означает, что гораздо меньшая часть команды должна быть процитирована и отправлена ​​до sudo.

Ответ 4

Как указывали другие, перенаправление оболочки выполняется текущей оболочкой, а не cat. sudo только изменяет разрешение программы, которая выполняется не из оболочки, выполняющей перенаправление. Мое решение заключается в том, чтобы избежать перенаправления:

sudo dd of=/etc/yum.repos.d/some-name.repo << EOF