Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » UNIX » Активные темы » UNIX Shell: sh, bash, zsh; Coreutils и ко.; sed, awk, perl;

Модерирует : ShriEkeR

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153

Открыть новую тему     Написать ответ в эту тему

digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Товарищи вопрошающие! Если ваша система отлична от ГНУ, и в то же время вы желаете обойтись только дефолтными средствами, указывайте и то и другое сразу, пожалуйста.


UNIX Shell

 
   Это глобальная тема по юниксовой командной оболочке, как по интерактивной работе в командной строке, так и по шелл-скриптам. Ключевые слова: sh, bash, zsh, tcsh, busybox, readline, coreutils, cp, mv, ln, rm, ls, readlink, mkdir, touch, stat, date, test, sleep, chown, chmod, chattr, dd, df, du, env, echo, cat, less, man, grep, sort, findutils, find, locate, xargs, md5sum, cmp, diff, patch, ps, kill, killall, tar, gzip, bzip2, xz, mount, fdisk, parted, mkfs, fsck, e2fsprogs, mtools, ss, netcat, netstat, rsync, ssh, scp, sftp, lftp, ncftp, time, strace.
   Неинтерактивная обработка текста (sed, awk, perl) пока тоже здесь.
   Смотри в других ветках: wget, convert, montage, mogrify и др., gs, git, 7z, p7zip, soffice, mplayer, mencoder, vlc, vim, mc, mcedit, kioclient.
 
 

Hint! Русские маны (подустаревшие, не всегда полные и не всегда для вашей системы) можно попытаться найти на Опеннете, к примеру: bash, tar, grep.

 
Готовые решения:
  • commandlinefu.com
    Крупнейшая база полезных однострочников на командной оболочке с ранжированием на основе пользовательского голосования.
     
  • shell-fu.org
    Аналогично, но поменьше и формат записей более свободный, поэтому встречаются и однострочники, и развернутые скрипты, и просто советы.
     
  • Useful one-line scripts for sed
    Почти исчерпывающий список решений для тех случаев, когда sed незаменим. Более сложные скрипты с sed.sf.net — только для тех, кто знает толк... :)

 
Учебная литература:
  • Greg’s Wiki (http://mywiki.wooledge.org)
    Наиболее обширный авторский сборник постоянно обновляющихся материалов по Башу.

    1. Bash Pitfalls
      (Частые ошибки программирования на Баше: [1], [2], [3], [4], [5] — пер. на русский по сост. на дек. 2008 г.).
      Рассмотрены преимущественно ошибки, возникающие из-за непонимания отличия шелла от «нормальных» скриптовых языков. Если вы уже владеете, например, Перлом, то это вполне может быть ваше первое руководство для ознакомления с Башем.
    2. Bash FAQ
    3. Bash Guide
    4. Bash Reference Sheet
      Шпаргалка по частым синтаксическим оборотам.

 
Классическая учебная литература:
С одной стороны не упомянуть эти издания нельзя, с другой — они настолько устарели, что едва ли их можно рекомендовать в роли учебника.

 

Смело правьте и дополняйте шапку, однако не забывайте отписываться об исправлениях и сохранять исходный вариант под #.
Первый пост темы имел вид...

Всего записей: 351 | Зарегистр. 19-04-2003 | Отправлено: 18:51 16-05-2008 | Исправлено: qw12, 09:42 24-03-2020
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RuPurple> можно ли сделать так, чтобы скрипт при запуске переводил сам себя в фоновый режим?
 
Хороший вопрос! А действительно, почему бы и нет.
 

Код:
#!/bin/bash
 
main() {
    while :; do
        echo qq
        sleep 10
    done
}
 
main &


----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 15:23 04-07-2014 | Исправлено: ASE_DAG, 15:23 04-07-2014
mithridat1



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как сделать бесконечный tail лог-файла с периодической ротацией ?
 
Добавлено:
Детский вопрос оказался
 
tail -F logfile

Всего записей: 4941 | Зарегистр. 05-01-2006 | Отправлено: 15:55 04-07-2014 | Исправлено: mithridat1, 15:55 04-07-2014
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
> тест на внимательность
 
:-) Сорри. Исправил.
 
> не понятен тот факт, что теряются все "лишние"пробелы когда результат записывается в переменную $line
 
Ну если ограничиться цитатами, то вот:
 
      read  [-ers]  [-a  aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout]
       [-u fd] [name ...]
              <...>
              names, the remaining names are assigned empty values.  The characters in IFS are used to
              split  the  line into words using the same rules the shell uses for expansion (described
              above under Word Splitting)
.
 
   Word Splitting
       <...>
       The  shell  treats  each  character  of IFS as a delimiter, and splits the results of the other
       expansions into words using these characters as field terminators.  If IFS  is  unset,  or  its
       value  is  exactly  <space><tab><newline>,  the  default, then sequences of <space>, <tab>, and
       <newline> at the beginning and end of the results of the previous expansions are  ignored
,  and
       any sequence of IFS characters not at the beginning or end serves to delimit words.  If IFS has
       a value other than the default, then sequences of the whitespace characters space and  tab  are
       ignored  at  the  beginning  and end of the word
, as long as the whitespace character is in the
       value of IFS (an IFS whitespace character).

 
Короче, непонятен скорее должен быть тот факт, что при опуске перечня переменных, word splitting не применяется — явно про это в мане, вроде бы, не сказано.
 
Добавлено:
Alukardd
 
> Вообще-то *$1* тоже ужасная конструкция, есть же оператор соответствующий.  
> [[ $REPLY =~ "$1" ]]
 
Что в ней ужасного? Четыре процесса она как [[ -z `echo "$line" | grep "$1"` ]] не запускает. Но да, греповопу оригиналу это =~ конечно соответствует больше, ибо Греп сопоставляет именно с регэкспом, а не с глобом. А, то, что регэксп открытый (a тождественно ^.*a.*$), а глоб закрытый — традиция, не более.  
 
karavan
 
Я надеюсь, вы уловили, что, пока $1 незакавычено, она принимает именно глоб / регэксп, а не строковый литерал?

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 17:41 04-07-2014 | Исправлено: ASE_DAG, 17:42 04-07-2014
karavan



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ASE_DAG
разницу увидел, но не прочувствовал, буду поковырять на эту тему, спасибо.

Всего записей: 1962 | Зарегистр. 02-12-2011 | Отправлено: 20:22 04-07-2014
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
karavan, всегда пожалуйста.
 
RuPurple, кстати, зачем вам все-таки этот ультимативный запуск в фоне был нужен?

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 20:39 04-07-2014
RuPurple



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Имеется устройство (тв-тюнер) с ОС Linux. Для корректной работы некоторых программ в нем необходимо было организовать проверку подключения к Интернет. Для этой цели я набросал нижеследующий скрипт.
Подробнее...
Сам скрипт еще нужно будет довести до ума, т.к. в этом виде он работает не хорошо.
Проблема заключается в том, что после запуска этой программы в фореграунде устройство намертво зависает. А переводить процесс в бэкграунд самостоятельно устройство не умеет.
Я еще не успел опробовать предложенный Вами метод решения этой проблемы. Как попробую, напишу.
Большое спасибо!

Всего записей: 724 | Зарегистр. 21-02-2010 | Отправлено: 13:25 05-07-2014
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Цитата:
Я надеюсь, вы уловили, что, пока $1 незакавычено, она принимает именно глоб / регэксп, а не строковый литерал?
я тут вчера-позавчера на работе почти 6 часов дебажил всю систему в целом и грешил на самые разные её части, пока не понял, что запихнул * внутрь кавычек в одной из команд

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 16:01 05-07-2014
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RuPurple> предложенный Вами метод решения этой проблемы
 
Я не предлагал методов решения этой проблемы, я лишь ответил на ваш прямой вопрос — может ли скрипт перевести в фон сам себя.
 
Ваша же задача решается самым обычным методом —  запуском этого скрипта (положим, он зовется connection-monitor) в фоне изначально: $ connection-monitor &
 
> переводить процесс в бэкграунд самостоятельно устройство не умеет
 
Как это «самостоятельно»?
 
Добавлено:
Alukardd, глобальный xtrace включается при помощи экспорта переменной SHELLOPTS:
 
$ set -x
$ export SHELLOPTS

 
Ага.

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 20:21 05-07-2014
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Спасибо
А что толку-то? Ну я увидел бы что команда выполняется как rm -rf "/path/*", мне бы это с первого взгляда бы не показалось подозрительным.
К тому есть одно НО. Это были не башовые скрипты, а run chef'а, с парочкой shell команд в рецепте. Которые падлы говорили, что всё выполнилось успешно, а по факту не чего не удалялось((( На самом деле что бы понять что в момент выполнения команды ни чего не удалялось тоже ушло несколько часов.

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 20:35 05-07-2014 | Исправлено: Alukardd, 20:36 05-07-2014
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd> К тому есть одно НО. Это были не башовые скрипты, а run chef'а, с парочкой shell команд в рецепте.
 
Это не «но», а именно то, к чему я сказал про глобальный xtrace. Если chef запущен так, что унаследовал SHELLOPTS и если шелл, который вызывался из chef’а, умеет этот самый SHELLOPTS*, то на него оно тоже подействует. Я, правда, не проверял именно с chef’ом, но препятствий не вижу.
 
*) Ни dash, ни busybox, увы, не умеют, возможно, что это сугубо башевая фича.

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 23:24 05-07-2014 | Исправлено: ASE_DAG, 20:12 08-07-2014
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Ну там вызывался ресурс bash и в параметре code я и так мог сначала выполнить set -x и не надо ни чего наследовать. Но как я уже сказал, бОльшая часть времени ушла на осозднание того что этот ресурс отрабатывает не верно и только пара-тойка run'ов ушли на осознание самой ошибке в bash'овой команде.

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 00:48 06-07-2014
RuPurple



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG

Цитата:
Как это «самостоятельно»?

На устройстве имеется конфигурационный файл автозапуска, который формируется путем его (устройства) настройки. В этом файле перечислены все программы, которые должны быть запущены после включения устройства. Однако, внесенная в него вручную строка
/root/bin/connection-monitor &
либо игнорируется и удаляется либо просто удаляется самим устройством.

Цитата:
Я не предлагал методов решения этой проблемы, я лишь ответил на ваш прямой вопрос — может ли скрипт перевести в фон сам себя.

Да, вероятно, я не удачно выразился. Но Вы мне таким образом сильно помогли.
Еще раз благодарю Вас!

Всего записей: 724 | Зарегистр. 21-02-2010 | Отправлено: 11:45 07-07-2014 | Исправлено: RuPurple, 12:10 07-07-2014
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Скорее всего офф, но по арии2 редирект сюда стоит, поэтому спрошу тут:
Win cmd (вот в чем оффтоп), не могу передать арии2 ничего по конвейеру. Команда типа:
Код:
echo <my_url>|aria2c -i-
, при запуске просто требует ввода с консоли. Если в эхе поставить редирект в файл, а в вызове арии2 - инпут из файла, то все работает как надо. С тем же вгетом все работает как должно.

Всего записей: 12396 | Зарегистр. 11-03-2002 | Отправлено: 10:50 17-07-2014
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pasha_ZZZ, УМВР.
 
 
$ echo 'http://example.org' | aria2c -i -
[#3201b3 0B/0B CN:1 DL:0B]                                                                                                                                                
07/17 11:49:29 [NOTICE] Download complete: /tmp/index.html
 
Download Results:
gid   |stat|avg speed  |path/URI
======+====+===========+=======================================================
3201b3|OK  |   620KiB/s|/tmp/index.html
 
Status Legend:
(OK):download completed.
 
$ aria2c --version
aria2 version 1.18.5
<...>


----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 11:51 17-07-2014
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ASE_DAG
Цитата:
УМВР
Я не просто так указал
Цитата:
Win cmd
А насчет версии -
Код:
>aria2c.exe -v
aria2 version 1.18.6

Всего записей: 12396 | Зарегистр. 11-03-2002 | Отправлено: 12:19 17-07-2014
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
> Я не просто так указал «Win cmd»
 
Зато вы не указали <my_url>.

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 13:11 17-07-2014
kpp77

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос по awk.
Есть ли возможность вызвать из скрипта awk вызвать внешнюю функцию с возвращением результата?
 

Код:
...
func_test()
{
  echo $1 | sed....
}
 
awk '{"funct_test $1"|getline rez; print rez}' file_test

Всего записей: 72 | Зарегистр. 29-08-2012 | Отправлено: 14:21 17-07-2014
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kpp77
Именно функцию — нету. Можно вызвать целый shell скрипт:
Код:
awk '{
        cmd = "/home/kpp77/script_test.sh "$1
        while ( ( cmd | getline result ) > 0 ) {
            print  "res = "result
        }  
        close(cmd)}' file_test
 

 
Или же делать конвейрами в скрипте:
Код:
#!/bin/bash
 
func_test () {
    echo "xxxx wwww $1"
}
 
func_test $(awk '{print $1}' file_test) | awk '{print $2,$3}'
 


----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 15:50 17-07-2014
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kpp77, «функцию Баша», вы хотите спросить. Функции — это не переменные, чтоб наследоваться. Т. о. это настолько же возможно насколько вызов функции AWK’а из Баша, т. е. краткий ответ, вероятно — нет.
 
И да, если вы вознамерились вызывать sed из AWK’а, то вы в последнем чего-то упустили.

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 15:54 17-07-2014
kpp77

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
 
К выполнению скрипта я уже пришел, а какой смысл этой конструкции?
Имеется в виду обертка в while.

Код:
while ( ( cmd | getline result ) > 0 ) {  
            print  "res = "result  
        }

 
ASE_DAG
Может что-то упустил.
awk идет по одному файлу.
Но для каждой итерации awk нужно сделать выборку из других файлов.
Как это сделать не вызывая нечто стороннее из awk я не придумал.

Всего записей: 72 | Зарегистр. 29-08-2012 | Отправлено: 16:11 17-07-2014 | Исправлено: kpp77, 16:13 17-07-2014
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153

Компьютерный форум Ru.Board » Операционные системы » UNIX » Активные темы » UNIX Shell: sh, bash, zsh; Coreutils и ко.; sed, awk, perl;


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru