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

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

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

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

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

 

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

Всего записей: 288 | Зарегистр. 19-04-2003 | Отправлено: 18:51 16-05-2008 | Исправлено: ASE_DAG, 22:02 01-03-2017
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 так умеет.

Всего записей: 219 | Зарегистр. 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 я нуб-нубом. Увы…

Всего записей: 219 | Зарегистр. 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!
 
---
Удачи!
Влад.

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



Junior 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’а.
 
> Понял, сделаю [полную трассировку]
 
А толку...  Если только еще какую-нибудь странность найти.

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

Всего записей: 199 | Зарегистр. 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 и запутался, числа разделил, а вот дальше ступор.

Всего записей: 288 | Зарегистр. 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.

Всего записей: 6213 | Зарегистр. 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 работает, но хочется же сделать всегда лучше.

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

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

Всего записей: 170 | Зарегистр. 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.

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



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

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

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

Всего записей: 1515 | Зарегистр. 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
 
?

Всего записей: 170 | Зарегистр. 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.

Всего записей: 6213 | Зарегистр. 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

Всего записей: 5545 | Зарегистр. 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, чтобы было понятно, откуда ноги растут.

Всего записей: 5545 | Зарегистр. 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. А они тоже нужны.

Всего записей: 5545 | Зарегистр. 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

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

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды



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

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2018

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru

Рейтинг.ru