Ответ 1
Перенаправление вывода (например, > ) выполняется bash, а не cat, во время работы с вашим UID. Для запуска с использованием корневого UID используйте sudo:
sudo bash -c 'cat << EOF > /etc/yum.repos.d/some-name.repo
line1
line2
line3
EOF'
Я попробовал следующее в командной строке в 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
, и он работал без каких-либо проблем. Что мне не хватает в приведенном выше?
Перенаправление вывода (например, > ) выполняется bash, а не cat, во время работы с вашим UID. Для запуска с использованием корневого UID используйте sudo:
sudo bash -c 'cat << EOF > /etc/yum.repos.d/some-name.repo
line1
line2
line3
EOF'
Другой вариант - tee.
cat << EOF | sudo tee -a /etc/yum.repos.d/some-name.repo
...
EOF
Как вариант для @Yuriy Nazarov, ответьте, только пропускная способность канала должна быть увеличена до sudo
. Входной канал может оставаться неровным:
sudo bash -c 'cat > /etc/yum.repos.d/some-name.repo' << EOF
line1
line2
line3
EOF
Это означает, что гораздо меньшая часть команды должна быть процитирована и отправлена до sudo
.
Как указывали другие, перенаправление оболочки выполняется текущей оболочкой, а не cat. sudo только изменяет разрешение программы, которая выполняется не из оболочки, выполняющей перенаправление. Мое решение заключается в том, чтобы избежать перенаправления:
sudo dd of=/etc/yum.repos.d/some-name.repo << EOF