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


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: AWK как передать переменную в shell?  (Прочитано 4553 раз)

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

Оффлайн eprst

  • Автор темы
  • Любитель
  • *
  • Сообщений: 57
  • sudo mount /dev/hand /ass
    • Просмотр профиля
    • Курорты Краснодарского Края.
как передать переменную $1 от awk k renice в командной строке
в такой конструкции

ps | grep vsftpd | awk -F " " | sudo renice -15 $1
в  $1  находится pid процесса vsftpd полученный от awk
« Последнее редактирование: 04 Мая 2010, 15:31:54 от eprst »
Desktop Ubuntu 15.04 x64 - Asus P5K-E - Xeon X5460 - GF 670GT
Курорты Краснодарского Края

Oni-chan

  • Гость
Re: AWK как передать переменную в shell?
« Ответ #1 : 04 Мая 2010, 15:33:30 »
зачем тут вообще переменная?
Да и вообще, по командам какая-то ерунда написана

Оффлайн eprst

  • Автор темы
  • Любитель
  • *
  • Сообщений: 57
  • sudo mount /dev/hand /ass
    • Просмотр профиля
    • Курорты Краснодарского Края.
Re: AWK как передать переменную в shell?
« Ответ #2 : 04 Мая 2010, 15:45:31 »
какой программист такая и команда :)

awk помещает пид процесса в $1.  проблема передaть её renice

а как правильно повысить приоритет процесса одной командой не зная его pid?
Desktop Ubuntu 15.04 x64 - Asus P5K-E - Xeon X5460 - GF 670GT
Курорты Краснодарского Края

Oni-chan

  • Гость
Re: AWK как передать переменную в shell?
« Ответ #3 : 04 Мая 2010, 15:54:33 »
Ты не понимаешь сущности пайпов.
1. ps просто так не выдаст списка процессов. Используй хотя бы ps ax (команда ps ax)
2. далее при помощи пайпа передаём результаты на обработку grep, в результате у нас останутся те строчки, которые содержат vsftpd (комнда ps ax | grep vsftpd)
3. при помощи пайпа эти строчки передаём на обработку awk. Кстати, в результате того, что написано в скрипте авк выдаст ошибку. Для того, чтобы получить первое поле, нужно использовать что-то типа awk '{print $1;}' . В результате, команда получается ps ax | grep vsftpd | awk '{print $1;}'
4. При помощи пайпа передаём в renice
ps ax | grep vsftpd | awk '{print $1;}' | sudo renice -15


Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: AWK как передать переменную в shell?
« Ответ #4 : 04 Мая 2010, 15:59:42 »
Когда Вы найдете pid процесса - надо запомнить ее в переменной.
А затем уже ее (эту переменную используйте.
$1 - это уже зарезервировано для 1 параметра скрипта, т.е.
если вызвано нечто так
aaa bbb
Внутри скрипта с названием "aaa" будет
$0 = "aaa"
$1 = "bbb"

Пользователь решил продолжить мысль 04 Мая 2010, 14:04:03:
Для использования в pipe нужно чтобы сама команда позволяла использовать stdin вместо параметра. Иначе работать не будет. Т.е. см. man.

Пользователь решил продолжить мысль 04 Мая 2010, 16:09:56:
eprst, примонтируйте голову лучше к плечам. :'(
« Последнее редактирование: 04 Мая 2010, 16:09:56 от alexander.pronin »

Оффлайн VestniK

  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
Re: AWK как передать переменную в shell?
« Ответ #5 : 04 Мая 2010, 16:10:25 »
Цитировать
ps ax | grep vsftpd | awk '{print $1;}' | sudo renice -15
Не уверен на 100% но скорей всего renice  не сможет взять таким образом PID и нужно сделать так:
sudo renice -15 $(ps ax | grep vsftpd | awk '{print $1;}' )

Пользователь решил продолжить мысль 04 Мая 2010, 16:15:55:
Решил проверить будет ли работать как нужно. Вот пример рабочего кода для анализа:
echo "Java pid is $(ps ax | grep java | grep -v "grep" | awk '{print $1;}')"
тут ещё PID "grep java" отрезается чтобы не мешался.
« Последнее редактирование: 04 Мая 2010, 16:15:55 от VestniK »

Оффлайн eprst

  • Автор темы
  • Любитель
  • *
  • Сообщений: 57
  • sudo mount /dev/hand /ass
    • Просмотр профиля
    • Курорты Краснодарского Края.
Re: AWK как передать переменную в shell?
« Ответ #6 : 04 Мая 2010, 16:39:17 »
sudo renice -15 $(ps ax | grep vsftpd | awk '{print $1;}' )

работает замечательно,  не знал что можно в  $() такую конструкцию нагромоздить

спасибо


Пользователь решил продолжить мысль 04 Мая 2010, 17:10:44:
по командам бардак потому что все выполняется через busybox на спутниковом тюнере
а там команды все кастрированные, ps c любым ключем выдает одно и тоже. хоть ax хоть e или вообще без ключей
« Последнее редактирование: 04 Мая 2010, 17:10:44 от eprst »
Desktop Ubuntu 15.04 x64 - Asus P5K-E - Xeon X5460 - GF 670GT
Курорты Краснодарского Края

Оффлайн WereBeast

  • Любитель
  • *
  • Сообщений: 85
    • Просмотр профиля
Re: AWK как передать переменную в shell?
« Ответ #7 : 04 Мая 2010, 23:47:53 »
/sudo mount \/dev\/hend \/ass/sudo mount \/dev\/hand \/ass/i

Программирую пропаганду
Windows - в гландах

Oni-chan

  • Гость
Re: AWK как передать переменную в shell?
« Ответ #8 : 04 Мая 2010, 23:57:05 »
/sudo mount \/dev\/hend \/ass/sudo mount \/dev\/hand \/ass/i
слеши не нужно экранировать

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: AWK как передать переменную в shell?
« Ответ #9 : 05 Мая 2010, 00:01:43 »
sudo renice -15 `pidof vsftpd`

Оффлайн eprst

  • Автор темы
  • Любитель
  • *
  • Сообщений: 57
  • sudo mount /dev/hand /ass
    • Просмотр профиля
    • Курорты Краснодарского Края.
Re: AWK как передать переменную в shell?
« Ответ #10 : 05 Мая 2010, 05:21:08 »
чувствуется рука мастера!
спасибо, работает
Desktop Ubuntu 15.04 x64 - Asus P5K-E - Xeon X5460 - GF 670GT
Курорты Краснодарского Края

 

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