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

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



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Привет. Ну мало ли. Может другие дела навалились...
Все равно ошибка вылазит:
 

Код:
# /tmp/saveidx /archive/obj/bastore F/FQT_RA
Can't locate IPC/Run.pm in @INC (@INC contains: /usr/lib/perl5/5.10.0/x86_64-linux-thread-multi /usr/lib/perl5/5.10.0 /usr/lib/perl5/site_perl/5.10.0/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.10.0 /usr/lib/perl5/vendor_perl/5.10.0/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.10.0 /usr/lib/perl5/vendor_perl .) at /tmp/saveidx line 20.
BEGIN failed--compilation aborted at /tmp/saveidx line 20.
 

 
Там действительно так сложно нужно? И наверное (жирным выделил) лишнее) saveidx /archive/obj/bastore F/FQT_RA.
Все равно огромное спасибо!

Всего записей: 212 | Зарегистр. 14-01-2003 | Отправлено: 10:13 07-09-2016
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CrownRU
 
> Can't locate IPC/Run.pm in @INC
 
Ну это модуля в системе нет.  Не обязан, конечно, но мне казалось, что он довольно распространенный, извиняюсь.  Ладно, завяжемся еще и на оболочку:
 

#!/usr/bin/perl
 
# package CrownRU::LibXML;
 
# use warnings;
# use XML::LibXML;
 
# my $xml_parser = XML::LibXML->new(validate => 0,
#                                   load_ext_dtd => 0);
 
# sub xpath
# {
#   my ($file, $xpath) = @_;
#   return $xml_parser->parse_file($file)->find($xpath)->string_value;
# }
 
package CrownRU::XSLTProc;
 
use warnings;
 
sub xpath
{
  my ($file, $xpath) = @_;
  return qx(xsltproc --novalid --nonet - "$file" <<EOF
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text" encoding="utf-8" />
  <xsl:template match="/">
    <xsl:value-of select='$xpath' />
  </xsl:template>
</xsl:stylesheet>
EOF)
}
 
package CrownRU;
 
use warnings;
use File::Path;
use File::Copy;
 
# *xpath = \&CrownRU::LibXML::xpath;
*xpath = \&CrownRU::XSLTProc::xpath;
 
sub new
{
  my ($class, $dir, $id) = @_;
  my $i = "$dir/$id";
  -d $i
    or die "$i: $!";
  my $self = { id => $id };
  (my $id_ = $id) =~ tr,/,_,;
  $self->{initscript} = "$i/bin/$id_";
  $self->{failed_dir} = "$i/failed";
  $self->{system_dir} = "$i/system";
  my $config = "$i/config/$id_.xml";
  $self->{import_dir} = xpath($config,
                              '//placeholder[@name="importPath"]/node()');
  return bless $self, $class;
}
 
sub id
{
  my $self = shift;
  return $self->{id};
}
 
sub start
{
  my $self = shift;
  system $self->{initscript}, 'start';
}
 
sub stop
{
  my $self = shift;
  system $self->{initscript}, 'stop';
}
 
sub process_failed
{
  my $self = shift;
  my @idxs = glob "$self->{failed_dir}/*.idx"
    or return;
  $self->stop();
  rmtree $self->{system_dir};
  move $_, $self->{import_dir} for @idxs;
  $self->start();
}
 
 
package main;
 
use warnings;
use Sys::Syslog qw(:standard :extended);
use Getopt::Long;
 
my $SCRIPTNAME = 'idxsafe';
 
my $syslog = 1;
my $timeout = 5 * 60;
 
GetOptions("no-syslog" => sub { $syslog = 0 },
           "timeout=i" => \$timeout);
 
@ARGV >= 1
  or die ("Usage examples:\n" .
          "    \$ $SCRIPTNAME /archive/obj/bastore\n" .
          "    \$ $SCRIPTNAME /archive/obj/bastore N/NST_F3 F/FQP_RA\n");
 
openlog $SCRIPTNAME, 'pid', LOG_USER;
 
$syslog
  or setlogsock 'stream', '/dev/stderr';
 
$SIG{__WARN__} = sub { syslog LOG_WARNING, @_ };
$SIG{__DIE__} = sub { syslog LOG_ERR, @_ };
 
my ($wd, @ids) = @ARGV;
 
-d $wd
  or die "$wd: $!";
 
chdir $wd
  or die "$!";
 
my @instances = map { CrownRU->new($wd, $_) } (@ids
                                               ? @ids
                                               : glob '?/???_*');
 
@instances > 0
  or die "No instances found";
 
syslog(LOG_INFO,
       "Started successfully on: %s", join ', ', map { $_->id } @instances);
 
for (;;) {
  for (@instances) {
    $_->process_failed()
      and syslog LOG_INFO, "%s restored", $_->id;
  }
  exit if $timeout < 0;
  sleep $timeout;
}

 
> Там действительно так сложно нужно?  :-( И наверное (жирным выделил) лишнее) saveidx /archive/obj/bastore F/FQT_RA.
 
В каком смысле?

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 10:34 07-09-2016
CrownRU



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

Цитата:
> Там действительно так сложно нужно?   И наверное (жирным выделил) лишнее) saveidx /archive/obj/bastore F/FQT_RA.
 
В каком смысле?
 

Я имею ввиду, что вот так было бы логичней просто: saveidx FQT_RA
 
Сейчас проверю.
 
Запустил - висит, в смысле не выходит в шелл, но похоже работает. Во всяком случае тестовый файл переместился из failed.

Всего записей: 212 | Зарегистр. 14-01-2003 | Отправлено: 10:53 07-09-2016
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CrownRU> Я имею ввиду, что вот так было бы логичней просто: saveidx FQT_RA
 
Да бога ради.

@@ -95,18 +95,15 @@
 use Sys::Syslog qw(:standard :extended);
 use Getopt::Long;
 
-my $SCRIPTNAME = 'idxsafe';
+my $SCRIPTNAME = 'saveidx';
 
 my $syslog = 1;
 my $timeout = 5 * 60;
+my $wd = '/archive/obj/bastore';
 
 GetOptions("no-syslog" => sub { $syslog = 0 },
-           "timeout=i" => \$timeout);
-
-@ARGV >= 1
-  or die ("Usage examples:\n" .
-          "    \$ $SCRIPTNAME /archive/obj/bastore\n" .
-          "    \$ $SCRIPTNAME /archive/obj/bastore N/NST_F3 F/FQP_RA\n");
+           "timeout=i" => \$timeout,
+           "wd=s" => \$wd);
 
 openlog $SCRIPTNAME, 'pid', LOG_USER;
 
@@ -116,7 +113,7 @@
 $SIG{__WARN__} = sub { syslog LOG_WARNING, @_ };
 $SIG{__DIE__} = sub { syslog LOG_ERR, @_ };
 
-my ($wd, @ids) = @ARGV;
+my @ids = @ARGV;
 
 -d $wd
   or die "$wd: $!";

 
> ...но похоже работает.  Во всяком случае тестовый файл переместился из failed.
 
Можно еще в сислог заглянуть, посмотреть, о чем эта хрень отчиталась.
 


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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 11:11 07-09-2016
CrownRU



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

Цитата:
Можно еще в сислог заглянуть, посмотреть, о чем эта хрень отчиталась.  

 
 
Так ошибка в пути:

Код:
# /tmp/saveidx FST_YE
/archive/obj/bastore/FST_YE: No such file or directory at /tmp/saveidx line 49.
 

 
Приходится так:
# /tmp/saveidx F/FST_YE
 
Ой, да, извини, забыл лог выложить.
 

Код:
Sep  7 10:47:56 MO-0A248 saveidx[28218]: /archive/obj/bastore/FST_YE: No such file or directory at /tmp/saveidx line 49.
Sep  7 10:48:38 MO-0A248 saveidx[28237]: Started successfully on: F/FST_YE
Sep  7 10:48:38 MO-0A248 saveidx[28240]: Can't exec "/archive/obj/bastore/F/FST_YE/bin/F_FST_YE": No such file or directory at /tmp/saveidx line 77.
Sep  7 10:48:38 MO-0A248 saveidx[28237]: cannot unlink file for /archive/obj/bastore/F/FST_YE/system/.nfs0000000000246dda00000005: Device or resource busy at /tmp/saveidx line 86
Sep  7 10:48:38 MO-0A248 saveidx[28237]: cannot restore permissions to 0100666 for /archive/obj/bastore/F/FST_YE/system/.nfs0000000000246dda00000005: Device or resource busy at /tmp/saveidx line 86
Sep  7 10:48:38 MO-0A248 saveidx[28237]: cannot unlink file for /archive/obj/bastore/F/FST_YE/system/.nfs0000000000246ddc00000006: Device or resource busy at /tmp/saveidx line 86
Sep  7 10:48:38 MO-0A248 saveidx[28237]: cannot restore permissions to 0100666 for /archive/obj/bastore/F/FST_YE/system/.nfs0000000000246ddc00000006: Device or resource busy at /tmp/saveidx line 86
Sep  7 10:48:38 MO-0A248 saveidx[28237]: cannot remove directory for /archive/obj/bastore/F/FST_YE/system: Directory not empty at /tmp/saveidx line 86
Sep  7 10:48:38 MO-0A248 saveidx[28241]: Can't exec "/archive/obj/bastore/F/FST_YE/bin/F_FST_YE": No such file or directory at /tmp/saveidx line 71.
Sep  7 10:48:38 MO-0A248 saveidx[28237]: F/FST_YE restored
 


Всего записей: 212 | Зарегистр. 14-01-2003 | Отправлено: 11:53 07-09-2016
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CrownRU> # /tmp/saveidx FST_YE
 
А!  Тебе еще и без префикса.  Ну вот так должно приниматься как с, так и без:
 

#!/usr/bin/perl
 
# package CrownRU::LibXML;
 
# use warnings;
# use XML::LibXML;
 
# my $xml_parser = XML::LibXML->new(validate => 0,
#                                   load_ext_dtd => 0);
 
# sub xpath
# {
#   my ($file, $xpath) = @_;
#   return $xml_parser->parse_file($file)->find($xpath)->string_value;
# }
 
package CrownRU::XSLTProc;
 
use warnings;
 
sub xpath
{
  my ($file, $xpath) = @_;
  return qx(xsltproc --novalid --nonet - "$file" <<EOF
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text" encoding="utf-8" />
  <xsl:template match="/">
    <xsl:value-of select='$xpath' />
  </xsl:template>
</xsl:stylesheet>
EOF)
}
 
package CrownRU;
 
use warnings;
use File::Path;
use File::Copy;
 
# *xpath = \&CrownRU::LibXML::xpath;
*xpath = \&CrownRU::XSLTProc::xpath;
 
sub new
{
  my ($class, $dir, $id) = @_;
  my $pfx = substr $id, 0, 1;
  my $i = "$dir/$pfx/$id";
  -d $i
    or die "$i: $!";
  my $self = { id => $id };
  $self->{initscript} = "$i/bin/${pfx}_${id}.sh";
  $self->{failed_dir} = "$i/failed";
  $self->{system_dir} = "$i/system";
  my $config = "$i/config/${pfx}_${id}.xml";
  $self->{import_dir} = xpath($config,
                              '//placeholder[@name="importPath"]/node()');
  return bless $self, $class;
}
 
sub id
{
  my $self = shift;
  return $self->{id};
}
 
sub start
{
  my $self = shift;
  system $self->{initscript}, 'start';
}
 
sub stop
{
  my $self = shift;
  system $self->{initscript}, 'stop';
}
 
sub process_failed
{
  my $self = shift;
  my @idxs = glob "$self->{failed_dir}/*.idx"
    or return;
  $self->stop();
  rmtree $self->{system_dir};
  move $_, $self->{import_dir} for @idxs;
  $self->start();
}
 
 
package main;
 
use warnings;
use Sys::Syslog qw(:standard :extended);
use Getopt::Long;
 
my $SCRIPTNAME = 'saveidx';
 
my $syslog = 1;
my $timeout = 5 * 60;
my $wd = '/archive/obj/bastore';
 
GetOptions("no-syslog" => sub { $syslog = 0 },
           "timeout=i" => \$timeout,
           "wd=s" => \$wd);
 
openlog $SCRIPTNAME, 'pid', LOG_USER;
 
$syslog
  or setlogsock 'stream', '/dev/stderr';
 
$SIG{__WARN__} = sub { syslog LOG_WARNING, @_ };
$SIG{__DIE__} = sub { syslog LOG_ERR, @_ };
 
my @ids = @ARGV;
 
-d $wd
  or die "$wd: $!";
 
chdir $wd
  or die "$!";
 
my @instances = map { s,^./,,;
                      CrownRU->new($wd, $_); } (@ids
                                                ? @ids
                                                : glob '?/???_*');
 
@instances > 0
  or die "No instances found";
 
syslog(LOG_INFO,
       "Started successfully on: %s", join ', ', map { $_->id } @instances);
 
for (;;) {
  for (@instances) {
    $_->process_failed()
      and syslog LOG_INFO, "%s restored", $_->id;
  }
  exit if $timeout < 0;
  sleep $timeout;
}

 
> Ой, да, извини, забыл лог выложить.
> Can't exec "/archive/obj/bastore/F/FST_YE/bin/F_FST_YE": No such file or directory at /tmp/saveidx line 77.
 
Ну это я, как ты уже понял, пока вся шла вся эта тягомотина, суффикс .sh потерял (выше исправлено).
 
> Сannot unlink file for /archive/obj/bastore/F/FST_YE/system/.nfs0000000000246dda00000005: Device or resource busy at /tmp/saveidx line 86
 
А вот это не ко мне.  Впрочем, вероятно, это из-за неостанова, да?
 
Кстати говоря, в порядке тестирования, ведь наверное, сислог засорять ни к чему, да и бесконечный цикл не нужен, так что почему бы тебе не запускать его с ключами --no-syslog --timeout -1?


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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 15:18 09-09-2016 | Исправлено: ASE_DAG, 16:09 09-09-2016
CrownRU



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

Код:
MO-0A248 saveidx[6566]: cannot remove directory for /archive/obj/bastore/N/NST_Y/system: Das Verzeichnis ist nicht leer at /tmp/saveidx line 86
 

там не директория, а содержимое директории должно стираться.
 
И можно без ключей сделать, чтобы они запускались по умолчанию, раз без них вис происходит?
И еще, можно между stop - start вставить короткий sleep на 3 секунды?

Всего записей: 212 | Зарегистр. 14-01-2003 | Отправлено: 11:42 19-09-2016
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CrownRU
 
> cannot remove directory for /archive/obj/bastore/N/NST_Y/system: Das Verzeichnis ist nicht leer at /tmp/saveidx line 86
 
Что по русски говоря значит «каталог не пуст»?  Не могу сказать, что ему не нравится — само собой, он не пуст, поэтому и rmtree.
 
Однако коль скоро имеется такое чудное требование, что «там не директория, а содержимое директории должно стираться», то просто вот:
 

#!/usr/bin/perl
 
# package CrownRU::LibXML;
 
# use warnings;
# use XML::LibXML;
 
# my $xml_parser = XML::LibXML->new(validate => 0,
#                                   load_ext_dtd => 0);
 
# sub xpath
# {
#   my ($file, $xpath) = @_;
#   return $xml_parser->parse_file($file)->find($xpath)->string_value;
# }
 
package CrownRU::XSLTProc;
 
use warnings;
 
sub xpath
{
  my ($file, $xpath) = @_;
  return qx(xsltproc --novalid --nonet - "$file" <<EOF
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text" encoding="utf-8" />
  <xsl:template match="/">
    <xsl:value-of select='$xpath' />
  </xsl:template>
</xsl:stylesheet>
EOF)
}
 
package CrownRU;
 
use warnings;
use File::Path;
use File::Copy;
 
# *xpath = \&CrownRU::LibXML::xpath;
*xpath = \&CrownRU::XSLTProc::xpath;
 
sub new
{
  my ($class, $dir, $id) = @_;
  my $pfx = substr $id, 0, 1;
  my $i = "$dir/$pfx/$id";
  -d $i
    or die "$i: $!";
  my $self = { id => $id };
  $self->{initscript} = "$i/bin/${pfx}_${id}.sh";
  $self->{failed_dir} = "$i/failed";
  $self->{system_dir} = "$i/system";
  my $config = "$i/config/${pfx}_${id}.xml";
  $self->{import_dir} = xpath($config,
                              '//placeholder[@name="importPath"]/node()');
  return bless $self, $class;
}
 
sub id
{
  my $self = shift;
  return $self->{id};
}
 
sub start
{
  my $self = shift;
  system $self->{initscript}, 'start';
}
 
sub stop
{
  my $self = shift;
  system $self->{initscript}, 'stop';
}
 
sub clear_system_dir
{
  my $self = shift;
  opendir my $dh, $self->{system_dir};
  for (readdir $dh) {
    $_ ne '.' && $_ ne '..'
      or next;
    my $f = "$self->{system_dir}/$_";
    if (-d $f) {
      rmtree $f;
    } else {
      unlink $f;
    }
  }
}
 
sub process_failed
{
  my $self = shift;
  my @idxs = glob "$self->{failed_dir}/*.idx"
    or return;
  $self->stop();
  $self->clear_system_dir();
  move $_, $self->{import_dir} for @idxs;
  $self->start();
}
 
 
package main;
 
use warnings;
use Sys::Syslog qw(:standard :extended);
use Getopt::Long;
 
my $SCRIPTNAME = 'saveidx';
 
my $syslog = 1;
my $timeout = 5 * 60;
my $wd = '/archive/obj/bastore';
 
GetOptions("no-syslog" => sub { $syslog = 0 },
           "timeout=i" => \$timeout,
           "wd=s" => \$wd);
 
openlog $SCRIPTNAME, 'pid', LOG_USER;
 
$syslog
  or setlogsock 'stream', '/dev/stderr';
 
$SIG{__WARN__} = sub { syslog LOG_WARNING, @_ };
$SIG{__DIE__} = sub { syslog LOG_ERR, @_ };
 
my @ids = @ARGV;
 
-d $wd
  or die "$wd: $!";
 
chdir $wd
  or die "$!";
 
my @instances = map { s,^./,,;
                      CrownRU->new($wd, $_); } (@ids
                                                ? @ids
                                                : glob '?/???_*');
 
@instances > 0
  or die "No instances found";
 
syslog(LOG_INFO,
       "Started successfully on: %s", join ', ', map { $_->id } @instances);
 
for (;;) {
  for (@instances) {
    $_->process_failed()
      and syslog LOG_INFO, "%s restored", $_->id;
  }
  exit if $timeout < 0;
  sleep $timeout;
}

 
> И можно без ключей сделать, чтобы они запускались по умолчанию, раз без них вис происходит?
 
ОМГ.  Какой еще «вис»?  Я, конечно, за такое время уже, может быть, все и забыл, но по-моему это условием задачи было, чтоб программка: а) проверяла, не валяются ли упавшие файлы, *регулярно* (здесь я уже не помню по какой причине задался интервалом по-умолчанию в пять минут), б) писала в системный лог; не?
 
> И еще, можно между stop - start вставить короткий sleep на 3 секунды?
 
Я думаю, что без проблем.  Однако, как можно заметить, между start и stop происходит собственно работа над файлами в двух строчках, так что вставляй в любое из трех возможных мест.  Образец там есть.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 07:41 20-09-2016 | Исправлено: ASE_DAG, 08:03 20-09-2016
urodliv



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Коллеги, объясните непонимающему.
Есть файл с текстом:

Код:
    name*1*=7897985464897523fsdf.jpg
    name*1*="7897985464897523fsdf.jpg"
    name*1=7897985464897523fsdf.jpg
    name*1="7897985464897523fsdf.jpg"

Надо первую и третью строчки привести к виду:

Код:
    name=7897985464897523fsdf.jpg

А вторую и четвёртую, соответственно, к такому:

Код:
    name=7897985464897523fsdf.jpg"

Использую команду sed 's/name\*1\*{,1}\={,1}/name=some_/g', а этот подлец игнорирует квантификаторы. Куда бы его пнуть?

----------
Очень скоро еда станет совершенно безвкусной, и тогда этот недостаток придётся компенсировать хорошо развитым воображением.

Всего записей: 6684 | Зарегистр. 29-04-2009 | Отправлено: 09:57 27-09-2016 | Исправлено: urodliv, 10:00 27-09-2016
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
urodliv
Ну мне кажется Вы просто забыли ключ -E для sed'а.
 
А вообще не проще ли так?
Код:
sed '/name/s/*\?1*\?//g'
Или оно же
Код:
sed -E '/name/s/\*?1\*?//g'
В зависимости от наличия ключа -E

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

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 10:11 27-09-2016 | Исправлено: Alukardd, 10:12 27-09-2016
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
urodliv
> sed 's/name\*1\*{,1}\={,1}/name=some_/g'
 
Чего-то я вообще не понимаю, что здесь написано.  Что такое some_?
 
> Есть файл с текстом:
 
Там действительно отступы есть?  И их надо сохранить, да?  Хорошо.
 
>    name=7897985464897523fsdf.jpg
>    name=7897985464897523fsdf.jpg"
 
А нафига, если не секрет, удалять кавычку?  Тем не менее:

#!/bin/bash
 
shopt -s extglob
 
while IFS='=' read key val; do
    printf '%s=%s\n' "${key/name\*1?(\*)/name}" "${val#\"}"
done


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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 10:17 27-09-2016 | Исправлено: ASE_DAG, 10:19 27-09-2016
urodliv



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

Цитата:
А вообще не проще ли так?

Красивше, но надо в голову уложить.
 
ASE_DAG

Цитата:
Чего-то я вообще не понимаю, что здесь написано.  Что такое some_?

Артефакт. Его не должно было быть.

Цитата:
Там действительно отступы есть?  И их надо сохранить, да?

Отступы есть, сохранять не надо.

Цитата:
А нафига, если не секрет, удалять кавычку?

Ооооо, это страшная тайна, открыв которую, все будут ржать надо мной. Я уже думаю в более правильном направлении.

Цитата:
Тем не менее:

Это здорово, но у меня в .procmailrc обработка ведётся. Не хочу утяжелять код.

----------
Очень скоро еда станет совершенно безвкусной, и тогда этот недостаток придётся компенсировать хорошо развитым воображением.

Всего записей: 6684 | Зарегистр. 29-04-2009 | Отправлено: 17:54 27-09-2016 | Исправлено: urodliv, 17:54 27-09-2016
urodliv



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну в общем коллеги вы поняли? Доброго вам дня.
Требуется пояснение и помощь. Сначала без конкретных примеров.
Итак. Есть рабочий файл .procmailrc, который фильтрует почту. procmail, соответственно, вызывается fetcmail`ом. Если запуск fetchmail`а производить из командной строки, то почта великолепно принимается и сортируется. Стоит мне только поместить эту же самую команду в bash-скрипт и запустить этот скрипт, как тут же получаю ошибку синтаксиса файла .procmailrc. Ошибка приходится на первую не закомментированную строку. Если её закомментировать, то ругань будет на следующую строку и т.д.
Думал это связано с тем, что я использую собственные переменные окружения. Прописал во всех файла абсолютные пути - не помогло. Что это за фигня такая?

----------
Очень скоро еда станет совершенно безвкусной, и тогда этот недостаток придётся компенсировать хорошо развитым воображением.

Всего записей: 6684 | Зарегистр. 29-04-2009 | Отправлено: 21:19 06-10-2016
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
urodliv
А можно всё же увидеть скрипт, хотя бы начало.
А так же то как он вызывается. С уточнением того откуда он вызывается (например, из cron'а).

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

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 21:34 06-10-2016
urodliv



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

Код:
#! /bin/bash
 
# Каталог, где расположены все файлы настроек и исполняемые файлы
FRAMZAM="/home/user/framzam"
 
# На всякий случай создадим каталог для доставки почты
mkdir -p $FRAMZAM/mail
 
# Принимаем почту
fetchmail -f $FRAMZAM/.procmailrc -i $FRAMZAM/.fetchids

 
Это полный .fetchmailrc
 
Ну и .procmailru добавим
 
Из каталога со скриптом вызываю так: ./zam.sh
Могу вызывать так: /home/user/framzam/zam.sh
Скрипт сделан исполняемым.
 
Добавлено:
Alukardd
Нашёл! ССЗБ. В вызов fetchmail`а подставляю "рецептурник" procmail`а. Это уже клиника...


----------
Очень скоро еда станет совершенно безвкусной, и тогда этот недостаток придётся компенсировать хорошо развитым воображением.

Всего записей: 6684 | Зарегистр. 29-04-2009 | Отправлено: 21:55 06-10-2016 | Исправлено: urodliv, 21:58 06-10-2016
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
urodliv
И всё же...
Почему в первой строке у Вас пробел закрался после восклицательного знака?

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

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 23:47 06-10-2016
urodliv



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

Цитата:
Почему в первой строке у Вас пробел закрался после восклицательного знака?

Потому что я его туда поставил. Да и опыт показывает, что разбор этой строки не учитывает лидирующие пробелы или табуляции.

----------
Очень скоро еда станет совершенно безвкусной, и тогда этот недостаток придётся компенсировать хорошо развитым воображением.

Всего записей: 6684 | Зарегистр. 29-04-2009 | Отправлено: 00:33 07-10-2016
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
urodliv
Действительно, можно, не знал  
Похоже это заслуга execve(2), а может shell и сам trim'ает пробелы.

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

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 00:44 07-10-2016 | Исправлено: Alukardd, 00:47 07-10-2016
tmpl

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нужно переделать очень много ссылок в куче файлов вида http://example.com/page.php?id=NNN в http://example.com/NNN, т.е. в любом текстовом редакторе с регулярками это будет замена (http://example.com/)page.php?id=([0-9]+) на $1$2. Но я не смог найти, как это можно сделать с помощью awk, т.к. из доков следует, что он не умеет работать с найденными совпадениями, которые в скобках. Гугл не помог, там нашел только, что в gawk есть нестандартное расширение для такого. Можно ли сделать желаемое на awk?

Всего записей: 1274 | Зарегистр. 22-03-2008 | Отправлено: 22:18 10-10-2016
stupom



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tmpl в вашем случае, более естественно использовать sed. AWK более универсальный язык, сделать, конечно, можно и на нём, только будет на порядок сложнее.

Всего записей: 182 | Зарегистр. 04-07-2015 | Отправлено: 22:24 10-10-2016
Открыть новую тему     Написать ответ в эту тему

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