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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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 154

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

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
      Шпаргалка по частым синтаксическим оборотам.

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

 

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

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



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Увы, Pasha_ZZZ
Цитата:
А чем date не угодил?
Цитата:
date -u -d'1970/01/01' +%s
Мой Cmd.exe WinXp таких изысков не разумеет:
Код:
C:\>date -u -d'1970/01/01' +%s
Указана недопустимая дата.
Введите новую дату (гг-мм-дд):
А ставить порт "date" из *nix для разовой задачи...
 
Ок, thx. Попытаю в топике о LibreOffice/OpenOffice, может Calk так умеет.

Всего записей: 262 | Зарегистр. 14-02-2009 | Отправлено: 01:36 26-02-2018
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NvvLazyTiger
> Вопрос: как из такого литерала «дата» получить эквивалентное число?
 
Ну, они далеко не эквивалентны.  Во-первых, как нетрудно заметить, %s точнее %Y-%m-%d в 86400 раз, а во-вторых, что уже может быть не так очевидно, для %s находимо более одной %Y-%m-%d.  Да-да, когда в Киеве 26-е, на Камчатке уже зачастую 27-е.  :-)
 
> (не «в лоб», через итерации)
 
Слушайте, я вас не понимаю :-/.  Почему не «в лоб»?  Кто вам навязал такое ограничение?  И какие еще, к черту, «итерации»?
 
Функция обратная strftime() — это strptime().  Но АВК к ней интерфейса по какой-то причине не дает.
 
Так что могу предложить три вещи:
 
1. Написать этот интерфейс и оформить в виде разделяемой бибилиотеки.
 
2. Написать реализацию strptime() прямо на АВКе.
 
3. Таки решить разбор строки вида %Y-%m-%d «в лоб», а не писать разбор даты в общем виде.
 
Выбирайте, что вам удобнее.  :-)
 
Ну или всегда можно нагородить костылей.  Но этого я вам предлагать не стану.


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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 11:48 26-02-2018
NvvLazyTiger



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я сожалею, ASE_DAG, но вы, похоже, не обратили внимание вот на это:
Цитата:
для разовой задачи
Отсель и желание «обойтись малой кровью».
 
Я (не знал, но) надеялся вот на это:
Цитата:
Функция обратная strftime() — это strptime()

Раз этой обратной функции нет (в моём, знакомом gAwk) – буду искать альтернативы gAwk-у.
 
Поясню. Фактически мне занадобилось находить «разницу в днях» для пар дат (в виде литералов). Пока этих пар было меньше десятка, – обошёлся подходящим сервисом on-line для. А вот когда таких пар стало несколько сотен, – засуетился…
 
Повторюсь:
Цитата:
Попытаю в топике о LibreOffice/OpenOffice, может Calk так умеет.
Просто  gAwk я использую уже лет 20. Задачи довольно простые, но для обработки файлов "plain text" – самое оно. А в LO я нуб-нубом. Увы…

Всего записей: 262 | Зарегистр. 14-02-2009 | Отправлено: 14:30 26-02-2018
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
> Поясню. Фактически мне занадобилось находить «разницу в днях» для пар
> дат (в виде литералов).
 
Не пояснили.  Вообще ничего не добавилось.
 
Так, вы так не проговорили, к примеру, явно, что формат фиксированный, и угадывать его не надо.  Если все-таки надо, то это уже не strptime(), а parse_datetime() — та самая, которую использует тот же date(1), который вы за каким-то лесом отвергаете.  Вот ее вы, наверное, уже не сами не напишите, так что только первый вариант остается — пробрасывать интерфейс.
 
> Повторюсь:
>> Попытаю в топике о LibreOffice/OpenOffice, может Calk так умеет.
> Просто gAwk я использую уже лет 20. Задачи довольно простые, но для
> обработки файлов "plain text" – самое оно. А в LO я нуб-нубом. Увы…
 
facepalm.jpg.


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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 15:22 26-02-2018 | Исправлено: ASE_DAG, 15:24 26-02-2018
NvvLazyTiger



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

Код:
В моём мануале нашлась функция обратная strftime() — это mktime("YYYY MM DD HH MM SS [DST]")

Литерал «дата» я могу построить в любом формате (в т.ч. и в виде "YYYY MM DD HH MM SS [DST]"). Но, увы мне, мануалы по gAwk я «пропахивал» лет 12-15 назад, когда строил  и внедрял на производстве согласованный комплекс технологических серверных скриптов (CMD, AWK, VBS, etc.), обслуживающих потоки первичных учётных данных региона. Вот и подзабылось кое-что…
 
I’m happy now. Thx!
 
---
Удачи!
Влад.

Всего записей: 262 | Зарегистр. 14-02-2009 | Отправлено: 01:54 27-02-2018
CrownRU



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

Цитата:
CrownRU
 
> Также вставил echo для наглядности.
 
А трассировка для чего же?  
 
> + nohup archpro -i /archive/obj/cssap/N/NQT_R/archint.ini.NQT_R
> nohup: h&#228;nge Ausgabe an „nohup.out“ an
> ./pck_restart.sh: line 15:  8325 Error nohup archpro -i "$k"
 
Ну и к уже отмеченному т-щем Алукардом, еще можно заметить, что вовсе не пишет он этого по-немецки.  Он пишет какой-то номер, а что-то не припомню я, чтобы у ГНУ Баша были номерные ошибки.  Это точно он?
 
Добавлено:
> это строка с find
 
Какой еще find?  Там нет find’а.
 
> Понял, сделаю [полную трассировку]
 
А толку...  Если только еще какую-нибудь странность найти.

 
Прошу прощения, что пропал - обстоятельства...
Т.к. я тестирую скрипт на нерабочей машине -, вызываемая программа выдает ошибку. Отсюда странности с ошибками.

Всего записей: 212 | Зарегистр. 14-01-2003 | Отправлено: 12:30 02-03-2018
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть у меня один скрипт, который из внешнего ftp ежедневно загружает файлы на мою сторону. Файлы имеют вид в виде текущей даты YYYY-MM-DD.txt и YYYY-MM-DDtext.txt. Например 2018-03-07.txt и 2018-03-07dop.txt. Скрипт загрузки простой:
wget $INPUT_FTP/*.txt $OUTPUT_LOCAL
Владельцы ftp за старыми файлами не следят и там лежат файлы за несколько лет и скрипт ежедневно это все проверяет. Решил его переделать, самый быстрый вариант это:

Код:
 
for m in {0..14}; do
DATA_DAY=$(date +%Y-%m-%d -d "+$M day")
wget $INPUT_FTP/$DATA_DAY*.txt $OUTPUT_LOCAL
done
 

В нем не нравится уход на дату вперед, но бывает что там файлы с датой на несколько дней вперед.
Есть мысль парсить .listing через gawk и эти реальные даты уже подставлять в wget. Но как в gawk сделать сравнение текущей даты и даты в .listing, учитывая год месяц и день? Начал использовать split и запутался, числа разделил, а вот дальше ступор.

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 17:49 07-03-2018
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
Сравнивать даты всегда стоит через timestamp.
Можно это делать циклом в bash с вызовом утилиты date. now=$(date '+%s');  d="2018-03-02"; [[ $(date -d "$d" '+%s') -lt $now ]] && echo "OLD $d"
Можно это делать на GNU AWK через функцию mktime gawk 'BEGIN{now=systime()} {if (mktime($0) < now) print "OLD "$0}' <<< "2018 03 2 00 00 00"
 
Как видите mktime принимает весьма не удобную строку на вход и ни что иное задать нельзя, на сколько я знаю. Да в awk не проблема сформировать нужную строку, но тем не менее...
Напротив, утилита date очень всеядна.
 
Итого, если речь идет о паре сотен строк, то я бы взял bash. Если их там тысячи и время хоть сколько-то важно, то я бы использовал gawk.

----------
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.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 12:15 08-03-2018
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422, я не вполне понял проблему, что вы пытаетесь решить.   Вы хотите написать реализацию ключа --timestamping на Баше?
 
> Владельцы ftp за старыми файлами не следят
 
А что они по-вашему должны с ними делать?
 
> и там лежат файлы за несколько лет
 
Так это же отлично!
 
> wget $INPUT_FTP/*.txt $OUTPUT_LOCAL ежедневно это все проверяет
 
Возможно, у вас какие-то умолчания другие, или я чего-то не помню, но так он их как раз *не должен* проверять, он должен их перезагружать заново.


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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 16:31 08-03-2018 | Исправлено: ASE_DAG, 16:32 08-03-2018
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG - мне не нужны файлы, созданные ранее, т.к. они неактуальны и написать владельцам ftp скрипт который бы удалял старые файлы было бы лучшим решением (Cerberus FTP Server - оно под Windows, все понятно), но что есть. Моя задача скачать файлы на текущую дату и если есть на будущую, если они лежат на ftp, т.к. очистка от старых файлов на моей стороне есть. Считываем файл .listing, из 7 ячейки $7 читаем какие есть файлы начиная от текущей даты и подставляем их поштучно в wget. В принципе через for работает, но хочется же сделать всегда лучше.

Всего записей: 360 | Зарегистр. 19-04-2003 | Отправлено: 18:07 08-03-2018
dvk54

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Товарищи, помогите с синтаксисом пожалуйста!!!
 
в неком ховто для centos команда  
chown user. "каталог"
 
никак не могу найти - что эта ... точка делает!
Подскажите аналогию для freebcd

Всего записей: 178 | Зарегистр. 18-06-2005 | Отправлено: 22:15 25-03-2018
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dvk54
Точка(.) раньше использовалась в качестве разделителя имени пользователя и группы. Возможно в коде еще совместимость и оставлена. Используйте двоеточие(:) и в man'ах читайте именно про двоеточие(:).
Если опустить группу, то будет взята "основная" группа указанного пользователя.

----------
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.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 22:28 25-03-2018 | Исправлено: Alukardd, 22:28 25-03-2018
karavan



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

Цитата:
Возможно в коде еще совместимость и оставлена.

Оставлена.
Но соглашусь, что лучше использовать "двоеточие", т.к. в случае, когда в имени учетки или группы есть точка, то chown с разделителем "точка" свалится в ошибку.

Всего записей: 1962 | Зарегистр. 02-12-2011 | Отправлено: 22:51 25-03-2018
dvk54

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В ошибку и вываливается.
 
Т.е, правильно ли я понимаю, что если  
pw group add grp1
pw user add usr1 -g grp1
 
то аналогом chown usr1. /usr/krap будет:
chown usr1:grp1 /usr/krap
 
?

Всего записей: 178 | Зарегистр. 18-06-2005 | Отправлено: 00:18 26-03-2018
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dvk54
Цитата:
то аналогом chown usr1. /usr/krap будет:
Совсем аналогом будет chown usr1: /usr/crap
О чем я Вам сказал выше
Цитата:
Если опустить группу, то будет взята "основная" группа указанного пользователя.

 
p.s. хз, что такое krap, crap выглядит лучше))

----------
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.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 17:55 26-03-2018
Skif_off

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, пожалуйста, что-то я затупил (пронумеровал для удобства).
1. Double Commander иногда падает, но без каких-то ошибок, просто молча и быстро исчезает окно и процесс, условия не получается воспроизвести. При работе пишет в консоль, но постоянно запускать в терминале неудобно - уже не раз закрывая лишние окна закрывал и "лишний" терминал, решил пользовать скрипт в PATH с перенаправлением вывода в файл

Код:
#!/bin/sh
exec $HOME/.z/doublecmd/doublecmd > $HOME/.z/doublecmd/doublecmd-test.log 2>&1

и тут вылез один момент: сразу после запуска открываю doublecmd-test.log и вижу последние две строки

Код:
FileSystemWatcher thread starting
TColumns

но если запустить Double Commander напрямую в терминале, то там больше строк:

Код:
FileSystemWatcher thread starting
TColumnsFileView.Create components
TColumnsFileView.Create components
TColumnsFileView.Create components
TColumnsFileView.Create components
TColumnsFileView.Create components
frmMain.frmMainShow

Почему так и можно ли получить всё?
 
2. Почему-то в doublecmd-test.log стоки из STDERR запросто влезают посреди строки из STDOUT, типа

Цитата:
TColumnsFileView.Create compone
(doublecmd:28122): Pango-WARNING **: Invalid UTF-8 string passed to pango_layout_set_text()
 
nts

а в терминале - порядок, ровно и аккуратно. Это как-то можно поправить?
 
3. В подобных случаях (запуск скриптом) есть ли смысл предварительно перейти командой cd в каталог программы?
 
Добавлено:
Xubuntu 17.10

Всего записей: 6598 | Зарегистр. 28-01-2008 | Отправлено: 19:25 22-04-2018
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Skif_off, для начала — про .xsession-errors вы курсе, просто вам удобнее так, да?

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 02:32 23-04-2018
Skif_off

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Теперь в курсе, но лишь отчасти: Гугл выдаёт советы, как его отключить/удалить, на 4х языках (у кого-то на 40 с лишним Гб, хе-хе). Кто туда пишет? Все, кому не лень? Посмотрел у себя - из тех ошибок, которые Double Commander (далее DC) сыпет в консоль, там нет ни одной (и собран DC с минимальной зависимостью от системы, зачем ему писать что-то куда-то ещё?).
 
Туда, похоже, софт пишет из STDERR, тогда не очень подходит: мне нужно окружение, т.е. предыдущие строки из STDOUT, чтобы было понятно, откуда ноги растут.

Всего записей: 6598 | Зарегистр. 28-01-2008 | Отправлено: 12:52 23-04-2018
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Skif_off
> Теперь в курсе, но лишь отчасти: Гугл выдаёт советы, как его
> отключить/удалить, на 4х языках (у кого-то на 40 с лишним Гб,
> хе-хе). Кто туда пишет? Все, кому не лень?
 
Иксы.  Которые перенаправляют туда вывод ошибки со всех программ, у каких он, как вы думали, пропадает безвозвратно по причине того, что никуда не выводится.
 
> Посмотрел у себя - из тех ошибок, которые Double Commander (далее
> DC) сыпет в консоль, там нет ни одной (и собран DC с минимальной
> зависимостью от системы, зачем ему писать что-то куда-то ещё?).
>
> Туда, похоже, софт пишет из STDERR, тогда не очень подходит: мне нужно
> окружение, т.е. предыдущие строки из STDOUT, чтобы было понятно,
> откуда ноги растут.
 
То есть вы хотите сказать, что этот ваш «ДК» выводит ошибки на стандарный вывод вместо стандарного вывода ошибок?  Это баг, пишите рапорт.


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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 16:31 24-04-2018
Skif_off

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

Цитата:
Иксы.  Которые перенаправляют туда вывод ошибки со всех программ

Понял, спасибо, понаблюдаю. Хотя вопросы 1 и 3 всё ещё интересны

Цитата:
То есть вы хотите сказать, что этот ваш «ДК» выводит ошибки на стандарный вывод вместо стандарного вывода ошибок?

Нет, я сказал то, что сказал. В терминале вывод выглядит так (каждая строка соответствует строке вывода из соответствующего потока):

Код:
STDOUT
STDOUT
STDOUT
STDERR
STDERR
STDOUT

а если весь вывод перенаправить в файл, то в файле, бывает, получается так

Код:
STDOUT
STDOUT
STDO
STDERR
STDERR
UT
STDOUT

Почему?
 
Добавлено:
Тьфу ты, похоже, я неверно понял вопрос В общем, DC всё пишет как и куда положено - ошибки в STDERR, остальное в STDOUT, а в .xsession-errors вижу только ошибки, т.е. видимо, туда попадают строки из STDERR разных программ, но нет предшествующих строк из STDOUT. А они тоже нужны.

Всего записей: 6598 | Зарегистр. 28-01-2008 | Отправлено: 19:19 24-04-2018 | Исправлено: Skif_off, 19:20 24-04-2018
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 154

Компьютерный форум 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