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

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

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Может быть проблема с кодировкой в crontabе или обрабатываемом awkом файле. Т.е. Москва м.б. записана в разных кодировках.

Всего записей: 980 | Зарегистр. 14-12-2005 | Отправлено: 12:53 03-10-2018
MAGNet



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
U235, с кодировкой всё нормально.
Ещё раз повторю: в папку падает письмо, по incron'у запускается скрипт, который из письма вытаскивается вложение и распарсивает. Всё срабатывает, скрипт автоматически запускается, файл вытаскивается, но распарсивается не верно. Тут же следом руками запускаю тот же скрипт, который отрабатывает без ошибок.
Ясно, что дело в кодировке или в каких-то переменных среды, которые не подтягиваются для демона incrond.
Надо ещё погуглить чё-нить про локали демонов.. Короче, я уже моск сломал

Всего записей: 2074 | Зарегистр. 31-03-2004 | Отправлено: 15:05 03-10-2018
karavan



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
MAGNet
Задействуй hexdump, чтобы сравнивать не символы, а их коды.

Всего записей: 1962 | Зарегистр. 02-12-2011 | Отправлено: 15:59 03-10-2018
U235

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

Код:
awk -F "@" '{ if (($3+0 > 0) && ($4 == "Москва")) {printf "%s,%d\n",$2,$3} }'  

написать скрипт в нужной кодировке для awk и вызывать типа awk -f scriptfile.awk
м.б. проблемы с кавычками..
или попробовать поотлаживать  
типа
Код:
awk -F "@" '{ if (($3+0 > 0)) {printf "%s\t%s\n",$0, $4} }'  

и посмотреть какой строке  какой соответствует $4.
какая версия awk и режим совместимости?

Всего записей: 980 | Зарегистр. 14-12-2005 | Отправлено: 17:57 03-10-2018
MAGNet



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

Цитата:
Ясно, что дело в кодировке или в каких-то переменных среды, которые не подтягиваются для демона incrond

Всё так и оказалось.
Если из скрипта проверить локаль, то увидим:

Код:
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

Проблема решилась путем добавления в начало скрипта:

Код:
export LANG=ru_RU.UTF-8

Всего записей: 2074 | Зарегистр. 31-03-2004 | Отправлено: 09:10 08-10-2018
Denis_Kokyev



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Windows 10 + SED
Есть  рутинная задача - каждый день скачивать файл, удалять/изменять в нём  определённые  слова/выражения, обрабатывать определённой прогой и закидывать на FTP.
Погуглил, для таких задач советуют SED, скачал версию под Windows (sed-4.5-x64.exe).
В  пакетный файл записал ряд команд, сразу столкнулся с тем, что если в  bat  файле  есть  слова/выражения  на  русском - они превращаются в крокозябры.  Решил этот вопрос сменой кодировки пакетного файла на 866 OEM Русская.
И  вот  тут столкнулся с другой бедой. Нужный файл качается в кодировке UTF8, обрабатывается   и   впоследствии  используется  так  же  в  UTF8.  Но поэкспериментировав,   оказалось,   что   слова/выражения на русском в этом  файле  SED заменяет лишь если файл перевести в кодировку ANSI, в UTF8 заменяются лишь английские слова.
И  вот вопрос - может есть у SED какая то возможность работать с UTF8, или я не правильно команды задаю? Вот как то так я делаю:

Код:
sed-4.5-x64.exe -i "s/Что/Чем/g" file.txt

Всего записей: 1079 | Зарегистр. 24-02-2003 | Отправлено: 11:36 09-10-2018
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Denis_Kokyev
Можно в батнике сменить кодовую страницу.
Цитата:
chcp 65001
где-нибудь в начале и весь батник в UTF-8

Всего записей: 12815 | Зарегистр. 11-03-2002 | Отправлено: 11:39 09-10-2018
Denis_Kokyev



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

Цитата:
Можно в батнике сменить кодовую страницу.  

У меня если в батнике выставить любую кодировку, кроме 866, команды с русскими словами превращаются в псевдографику и замена в текстовом файле (который в UTF8) не происходит.
 
В программе @TextReplacer для таких случаев есть ключ:  /codepage:utf8  может в SED есть что то подобное.
 
Пока с помощью консольной утилиты меняю кодировку туда/сюда, примерно как-то так:

Код:
win_iconv.exe -c -f UTF-8 -t CP1251 "test.txt" > "test_1251.txt"

Всего записей: 1079 | Зарегистр. 24-02-2003 | Отправлено: 12:04 09-10-2018 | Исправлено: Denis_Kokyev, 13:47 09-10-2018
MAGNet



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Denis_Kokyev, нужно попробовать батник сохранить в кодировке UTF-8.
Это не проблема SED - это проблема операционной системы, какие строки она передает, такие и попадают.
То что при просмотре этого файла вы будете видеть крокозябры - ничего страшного.
У меня, например, прекрасно работает батник, где требуется DOS-кодировка, хотя в блокноте он отображается вот так:

Код:
net use O: "\\SR-DC1\ЋЎйЁҐ ¤®Єг¬Ґ-вл"

Основная задача - сохранить батники именно в кодировке обрабатываемых файлов.
Попробуйте сторонние редакторы типа Notepad++ Я лично для работы в винде пользуюсь FAR'ом, там редактор по Shift-F2 предлагает выбрать кодировку для сохранения.
В общем, нужно пробовать варианты..
 
зы
ну и самый брутальный метод - использовать двоичный формат
например так:

Код:
sed-4.5-x64.exe -i "s/\xD0\xA7\xD1\x82\xD0\xBE/\xD0\xA7\xD0\xB5\xD0\xBC/g" file.txt

HEX-коды можно так же посмотреть в просмотрщике FAR'а (F4)

Всего записей: 2074 | Зарегистр. 31-03-2004 | Отправлено: 08:47 10-10-2018 | Исправлено: MAGNet, 08:48 10-10-2018
MAGNet



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Подумалось, а зачем нужны эти извраты с кодировкой, с редакторами? Скрипт должен быть легко редактируемым.
Предлагаю не отказываться от конвертации взад-назад, но делать это без промежуточных файлов. Например так:

Код:
win_iconv.exe -c -f UTF-8 -t CP1251 "in.utf8" |  sed-4.5-x64.exe -i "s/Что/Чем/g" | win_iconv.exe -c -f CP1251 -t  UTF-8 > "out.utf8"

Всего записей: 2074 | Зарегистр. 31-03-2004 | Отправлено: 05:15 11-10-2018
Denis_Kokyev



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
MAGNet
Да проблем то как и чем кодировать нет, проблема в том, что у меня это не работает.
Про брутальный метод - думал, но не особо понимал как это реализовать. Благодаря Вашему примеру нашёл онлайн конвертер в UTF-8 на этом и остановился. Батник теперь у меня как и обрабатываемый файл - одного формата, всё работает как надо. И собирать слова / выражения по буковкам в фаре не надо.
Почему пришлось отказаться от использования консольной утилиты  win_iconv.exe.
Обратил внимание, что как то криво происходит замена после конверта - на некоторых словах пропадают буквы. Я бы понял, еслиб во всём файле эти буквы пропали, но нет. Может быть даже в одном слове буква в начале присутствовать, а в середине - отсутствовать. Причем до обработки SEDом - всё с буковками в порядке - то бишь утилита iconv обрабатывает файл правильно. Что то c SED потом не то. Попробую потом на других версиях SED. Или это связано как то с BOM...  
Но надоело уже экспериментировать  - с брутальным методом вроде пашет и на том хорошо!
Спасибо Вам за помощь!

Всего записей: 1079 | Зарегистр. 24-02-2003 | Отправлено: 12:49 11-10-2018 | Исправлено: Denis_Kokyev, 12:56 11-10-2018
MAGNet



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

Цитата:
Батник теперь у меня как и обрабатываемый файл - одного формата, всё работает как надо.

Всего записей: 2074 | Зарегистр. 31-03-2004 | Отправлено: 13:11 11-10-2018
Victor_VG



Tracker Mod
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вчера cURL обновили до версии 7.62.0.Из новых свойств появилась поддержка DOH - DNS-other-HTTPS, исправлено много ошибок. Официальная сборка для Win32/Win64 собрана в MinGW64 с поддержкой OpenSSL 1.1.1 и WinSSL, обновлены некоторые библиотеки:
 
curl 7.62.0 Win32/Win64 MinGW-w64 standalone build by Viktor Szakets
 
Release date: 2018-10-31
 
Libs:
 
  libcurl/7.62.0 OpenSSL/1.1.1 (WinSSL) zlib/1.2.11 brotli/1.0.7 WinIDN libssh2/1.8.0 nghttp2/1.34.0
 
Protocols:
 
  dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp
 
Features:
 
  AsynchDNS IDN IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL libz brotli TLS-SRP HTTP2 HTTPS-proxy MultiSSL

 
первые впечатления хорошие, на UNIX я её еще не собирал - приятель как обычно обещал прислать оптимизированные под наше железо патчи под Tru64 UNIX AXP и демона. С ними и посмотрю.

----------
Жив курилка! (Р. Ролан, "Кола Брюньон")
Xeon E5 2697v2/C602/128 GB PC3-14900L/GTX 1660 Ti, Xeon E5-2697v2/C602J/128 Gb PC3-14900L/GTX 1660 Ti

Всего записей: 34379 | Зарегистр. 31-07-2002 | Отправлено: 12:57 01-11-2018
dvk54

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Товарищи, может я какую чушь спрашиваю или элементарщину - ну вот не знаю.
Freebsd, оболочка - sh.
Надо зайти из хост1 на хост2 по ssh, запустить там, допустим, /usr/abcd.sh, и отключиться, но чтобы /usr/abcd.sh продолжал выполнятся. аутентификация ssh - по ключам.
Интерактивно, в принципе, я это могу сделать - через запуск screen (при этом ещё и сам screen останется висеть).
Но надо, чтобы это делалось по расписанию. Желательно - сугубо средствами ОС, без доппакетов.
Возможно?

Всего записей: 178 | Зарегистр. 18-06-2005 | Отправлено: 07:44 03-11-2018
U235

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

Код:
$ ssh root@192.168.1.1  'bash -s /usr/abcd.sh&'

Не уверен, но возможно как-то так..
Если надо по расписанию, то может имеет смысл использовать cron на хосте2?

Всего записей: 980 | Зарегистр. 14-12-2005 | Отправлено: 08:35 03-11-2018 | Исправлено: U235, 08:36 03-11-2018
dvk54

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
cron нельзя, в параметрах выполнения передаётся генерируемый хостом 1 пароль, а хост 2 крутится на внешнем хостинге.
sh -s не подходит, он запускает ДОЧЕРНИЙ процесс.  
А надо типа как запустил форк, отключился от него, самоубился. А форк продолжает крутится.
но как это в шелле реализовать - не знаю..
 
Добавлено:
Поправочка: невнимательно прочёл ответ U235.
Вроде работает, но как-то странно..

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dvk54
Я давно, конечно фрю не видел, но nohup ещё ни кто не отменял.
 
ssh host2 "nohup /my/super/command >>/var/log/mysuppercommand.log 2>&1 &"

----------
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 | Отправлено: 13:30 03-11-2018
dvk54

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
почитал про nohup, но приведённый Вами пример не работает:
 
#ssh host2 "nohup /root/u.sh>/var/log/test.log 2>&1 &"
"Неоднозначное перенаправление вывода."
 
#ssh host2 "nohup /root/u.sh>/var/log/test.log &"
- нормально, так, как и надо.
 
З.Ы.Я фрю вижу каждый день уже давно, но всего в ней не знаю. Она велика.
З.Ы.2 Спасибо!

Всего записей: 178 | Зарегистр. 18-06-2005 | Отправлено: 16:13 03-11-2018 | Исправлено: dvk54, 16:14 03-11-2018
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dvk54
Если там есть bash, то там сокращённо перенаправлять так: &>>/var/log/log.log
 
Ещё хочу обратить Ваше внимание на то, что Вы изменили перенаправление с дозаписью в файл в его перетирание: > vs >>

----------
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 | Отправлено: 18:06 03-11-2018 | Исправлено: Alukardd, 18:06 03-11-2018
dvk54

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
bash а нету.
перетирание вместо дозаписи - не критично, это я по-разному запускать пробовал.
1.Меня всё ещё интересует, как переписать ваш Ваш пример, чтобы он работал с sh
теперь по опытам.
выполняю из хост1:

Код:
 
ssh host2 'nohup /usr/local/etc/ar.sh 123 &'
 

ar.sh:

Код:
#!/bin/sh
portsdb -u
/usr/local/bin/rar a -inul -r -m5 -agYYYY-MM-DD_HHmm -p$1 /var/r.rar /usr/local &
 

 
2. запуск из u.sh portsdb -u - не работает. Пробовал и так
/usr/local/sbin/portsdb -u
и так
/usr/local/bin/ruby24 /usr/local/sbin/portsdb -u
3. запуск rar из u.sh - тоже не работает. Вывод rar блокирует закрытие сессии. Правда, если закрыть по ctl-c - продолжает выполнятся.
 

Всего записей: 178 | Зарегистр. 18-06-2005 | Отправлено: 09:57 04-11-2018 | Исправлено: dvk54, 09:58 04-11-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