Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: echo от пользователя и sudo echo  (Прочитано 1982 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн KolaniMir

  • Автор темы
  • Новичок
  • *
  • Сообщений: 41
    • Просмотр профиля
echo от пользователя и sudo echo
« : 31 Июля 2017, 10:24:23 »
Доброго времени суток! Не знал в какую рубрику запостить, решил в настройки системы.
Мне нужно некоторые настройки записать в файл. Хочется понятное дело не просто одной строкой, а красиво разбить.
Хочу echo перенаправить в файл. Столкнулся с интересным поведением в консоли.
echo 123 \\n 123                                                        1 ↵
123
 123

и с sudo
sudo echo 123 \\n 123
123 \n 123

Плюс прочел что запись в файл от обычного пользователя ">" работает, а под sudo нужно делать через "| sudo tee"
Может кто то пояснить поведение echo?
Спасибо.

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: echo от пользователя и sudo echo
« Ответ #1 : 31 Июля 2017, 11:18:21 »
type echo
alias echo
?
« Последнее редактирование: 31 Июля 2017, 11:20:20 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн KolaniMir

  • Автор темы
  • Новичок
  • *
  • Сообщений: 41
    • Просмотр профиля
Re: echo от пользователя и sudo echo
« Ответ #2 : 31 Июля 2017, 12:17:40 »
$ type echo
echo is a shell builtin

Алиасов на echo нет, команда
$ alias echo
ничего не вывела.

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Re: echo от пользователя и sudo echo
« Ответ #3 : 31 Июля 2017, 16:14:41 »
У меня без разницы:
$ echo 123 \\n 123
123 \n 123

$ sudo echo 123 \\n 123
123 \n 123

sudo выполняет указанную программу с правами рута.
А перенаправление вывода в файл ">" или ">>" выполняет не echo, а текущая оболочка права которой не изменились.

Для удобства можно такой алиас добавить:
stee(){ sudo tee -a "$1" >/dev/null; }Использование:
echo "текст" | stee "файл"

Оффлайн KolaniMir

  • Автор темы
  • Новичок
  • *
  • Сообщений: 41
    • Просмотр профиля
Re: echo от пользователя и sudo echo
« Ответ #4 : 31 Июля 2017, 16:58:56 »
Мне нужно добавить эту строчку в стартовый скрипт создания виртуальной машины с помощью вагранта.
Хочу сделать файл авторизации для компосера. Так что алиасы добавлять не хочу.
Спасибо за | stee "файл", обязательно воспользуюсь.
Но это всё лирика. Я хочу красивый файл настроек по типу
{
   "github-oauth": {
     "github.com": "<your github oauth id>"
   },
   "http-basic": {
      "repo.magento.com": {
         "username": "<public key>",
         "password": "<private key>"
      }
   }
}
Так вот файл создается под sudo. Как мне все эти переносы организовать?

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Re: echo от пользователя и sudo echo
« Ответ #5 : 31 Июля 2017, 17:30:52 »
base64 -w0 "файл_с_текстом_который_нужно_добавить"; echoПолучим код base64 текста который далее используем так:
echo код | base64 -d | sudo tee -a "файл_куда_добавить_текст" >/dev/null

Оффлайн Peter_I

  • Старожил
  • *
  • Сообщений: 3030
    • Просмотр профиля
Re: echo от пользователя и sudo echo
« Ответ #6 : 31 Июля 2017, 21:22:30 »
Пoльзуйтесь /bin/echo. А конструкции лучше заключать в "".
Пётр.

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Re: echo от пользователя и sudo echo
« Ответ #7 : 31 Июля 2017, 22:09:45 »
Peter_I,
Если ты имееш в виду:
sudo /bin/echo текст >> файлто получишь ожидаемую ошибку:
bash: файл: Отказано в доступе(владелец файла - рут)
потому что
перенаправление вывода в файл ">" или ">>" выполняет не echo, а текущая оболочка права которой не изменились.

А конструкции лучше заключать в "".
Какие?

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: echo от пользователя и sudo echo
« Ответ #8 : 01 Августа 2017, 00:24:32 »
Ubuntu только
echo -e "1\n2"
Wars ~.o

Оффлайн Peter_I

  • Старожил
  • *
  • Сообщений: 3030
    • Просмотр профиля
Re: echo от пользователя и sudo echo
« Ответ #9 : 01 Августа 2017, 21:44:58 »
Я имею в виду, что там, где надо использовть echo в опциями, надо вызывать /bin/echo.
Что касается перенаправления, то надо или стать root'ом через "su -" или запускать специальный
рутовый терминал. Я всегда делаюсь root'ом. Или запускать xterm чрез sudo, но я так не пробовал.
Пётр.

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Re: echo от пользователя и sudo echo
« Ответ #10 : 01 Августа 2017, 22:12:41 »
там, где надо использовть echo в опциями, надо вызывать /bin/echo.
Зачем?

Что касается перенаправления, то надо или стать root'ом
Это очевидно, и можно обойтись без перенаправления.

Я всегда делаюсь root'ом
Под рутом лучше входить только по нужде).

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28365
    • Просмотр профиля
Re: echo от пользователя и sudo echo
« Ответ #11 : 02 Августа 2017, 13:40:57 »
printf '%s\n' 123 123echo - непортируемая команда.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн KolaniMir

  • Автор темы
  • Новичок
  • *
  • Сообщений: 41
    • Просмотр профиля
Re: echo от пользователя и sudo echo
« Ответ #12 : 02 Августа 2017, 14:23:33 »
AnrDaemon, renzrv, спасибо, решил проблему через printf плюс tee.
printf '%s\n' '{' '    "http-basic":  {' '        "repo.magento.com":  {' '            "username": "key",' '            "password":  "pass' '        }' '    }' '}' | sudo tee auth.jsonСформировал файлик в читаемом виде с переносами.

Непортируемая команда это как?


Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28365
    • Просмотр профиля
Re: echo от пользователя и sudo echo
« Ответ #13 : 02 Августа 2017, 14:25:38 »
Непортируемая команда это как?
Это "работает как создатель на душу положит".

Пользователь добавил сообщение 02 Августа 2017, 14:30:34:
решил проблему через printf плюс tee.
В указанном случае лучше будет задать формат JSON полностью в первом параметре и передать в него только переменные части.
printf '{
    "http-basic":  {
        "repo.magento.com":  {
            "username": "%s",
            "password":  "%s"
        }
    }
}
' "$key" "$( printf "%s" "$pass" | sed -re 's/"/\\\1/g;' )"
« Последнее редактирование: 02 Августа 2017, 14:30:34 от AnrDaemon »
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Re: echo от пользователя и sudo echo
« Ответ #14 : 03 Августа 2017, 12:51:50 »
KolaniMir,
Если в многострочном виде, то проще всего
echo '{
   "github-oauth": {
     "github.com": "<your github oauth id>"
   },
   "http-basic": {
      "repo.magento.com": {
         "username": "<public key>",
         "password": "<private key>"
      }
   }
}' | sudo tee auth.json

 

Страница сгенерирована за 0.053 секунд. Запросов: 25.