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

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

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

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

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

 

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

Всего записей: 277 | Зарегистр. 19-04-2003 | Отправлено: 18:51 16-05-2008 | Исправлено: ASE_DAG, 22:02 01-03-2017
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CrownRU
Странно это. А что при этом попадает на экран или в nohup.out?
К тому же "как должно" быть и хак это не совсем равноценные конструкции. Хотя бы потому что команда в одном случае работает как фоновая задача в текущем шеле, а при хаке, он вообще про нее ни чего не знает, т.к. родителем числится init (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.

Всего записей: 6198 | Зарегистр. 28-08-2008 | Отправлено: 18:06 15-02-2018
CrownRU



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

Цитата:
Странно это. А что при этом попадает на экран или в nohup.out?  

Ничего не попадает окромя echo. nohup.out тоже пуст. Завтра утром проверю как скрипт поведет себя в боевой обстановке.
 
Может со screen можно что-то сделать?

Всего записей: 199 | Зарегистр. 14-01-2003 | Отправлено: 18:21 15-02-2018 | Исправлено: CrownRU, 18:36 15-02-2018
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CrownRU, о!  Сколько лет, а Арчхрени все те же.  :-)
 
Во-первых, давайте-те-ка без конских отступов:

#!/bin/bash
 
RED="$(tput setaf 1)"
GREEN="$(tput setaf 2)"
CYAN="$(tput setaf 6)"
SGR0="$(tput sgr0)"
BOLD="$(tput bold)"
 
# Читает ini файлы в директории...
for k in /archive/obj/cssap/*/*/archint.ini.*
do
    # ...и выуживает оттуда соответствующий номер порта.
    WEBPORT=$(awk /^WEBPORT/'{ print $2 }' $k)
    ARCHWIN=$(awk /^ARCHWIN_PORT/'{ print $2 }' $k)
    # Проверяет возможность соединения через WEBPORT, прописанный в файле $k
    curl -sm1 $(hostname -f):$(awk /^WEBPORT/'{ print $2 }' $k)  >/dev/null
    if [ $? -eq 0 ]
    then
        echo "Connected">/dev/null
        # Если соединение невозможно, то:
    else
        # 1. Показать ini файл, где происходит затык
        echo ${BOLD}${GREEN}$k${SGR0}
        # 2. Дополнительная информация через lsof
        lsof -i:$WEBPORT,$ARCHWIN $k
        # 3. Если инстанция висит, то...
        if [ $? -eq 0 ]
        then
            echo ${BOLD}${RED}Stoppe die Instanz $k${SGR0} >> /tmp/arge.log
            # 4. останавливаем ее
            archstop -i $k
            # 5. И на всякий случай прибиваем то, что по
            # останавливаться по-хорошему не хочет
            fuser -k -n tcp $WEBPORT
        fi
        echo ${BOLD}${RED}Starte die Instanz $k${SGR0} >> /tmp/arge.log
        # 6. Стартуем инстанцию. И вот здесь начинаются проблемы. $k
        # не поренимается, хотя echo $k показывает переменную
        # правильно.
        nohup archpro -i $k &
    fi
done

 
> ошибка в выполнении nohup archpro -i $k
 
Че, прямо по-русски пишет?  Интересно, кто.  Вообще написать такое может только Баш — $k-то нераскрыта, но я что-то не припомню у него сообщения, да и он всегда должен представляться — bash: и только потом сообщение.
 
Так или иначе, ну закавычивать же надо переменные.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 18:44 15-02-2018
CrownRU



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

Цитата:
Че, прямо по-русски пишет?  Интересно, кто.

 
Приветствую, маэстро
Не, пишет по-немецки - это я так, для понятности. Но суть-то в том, что переменная не перенимается - так и пытается подставить вместо переменной $k
Завтра попробую заковычить, но вещует мне что-то, что не поможет.

Всего записей: 199 | Зарегистр. 14-01-2003 | Отправлено: 20:24 15-02-2018 | Исправлено: CrownRU, 20:35 15-02-2018
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CrownRU> Не, пишет по-немецки - это я так, для понятности.  
 
Это не надо.  Если хочется понятности, то лучше просто $ export LANG=C.
 
> Завтра
 
Ну, если это такая тягомотина, то следующий шаг — это, разумеется, включить трассировку, и посмотреть, что там происходит.
 
#!/bin/bash
заменить на
#!/bin/bash -x

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 22:31 15-02-2018
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG, CrownRU
Может, для начала, лучше set -x перед проблемной строкой и set +x сразу после?
А то там цикл, вывод может быть огромен...

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

Всего записей: 6198 | Зарегистр. 28-08-2008 | Отправлено: 22:35 15-02-2018 | Исправлено: Alukardd, 22:35 15-02-2018
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd, и еще сутки долой?  ;-)

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 22:42 15-02-2018
Alukardd



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

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

Всего записей: 6198 | Зарегистр. 28-08-2008 | Отправлено: 22:53 15-02-2018
CrownRU



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Alukardd
Все, все, понял, завтра сразу попробую и отпишусь Спасибо за предложения.

Всего записей: 199 | Зарегистр. 14-01-2003 | Отправлено: 00:00 16-02-2018
CrownRU



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем здравствовать!
Извините, что задержался.
Вот вывод. Переменные, как вы и сказали, закавычил. Включил set -x.
Также вставил echo для наглядности.
 

Код:
set -x
nohup archpro -i "$k" &
echo "nohup archpro -i "$k" &"
set +x

 
 

Код:
/archive/obj/cssap/N/NQT_R/archint.ini.NQT_R
+ echo 'nohup archpro -i /archive/obj/cssap/N/NQT_R/archint.ini.NQT_R &'
nohup archpro -i /archive/obj/cssap/N/NQT_R/archint.ini.NQT_R &
+ set +x
+ 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"
 

Всего записей: 199 | Зарегистр. 14-01-2003 | Отправлено: 13:36 16-02-2018
qw12



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

Код:
./run.sh $line > result.txt

как в переменную line записать данные построчно из файла?

Всего записей: 292 | Зарегистр. 04-06-2001 | Отправлено: 14:28 16-02-2018
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
qw12
 вы спросили одно, а в куске кода привели противоположную операцию...
 

Цитата:
как в переменную line записать данные построчно из файла?
lines=`cat config.txt`
или
lines=$(<config.txt)
 
Добавлено:
CrownRU
Двойные кавычки внутри двойных не работают, надо экранировать... У тебя получилось что в echo переменная $k оказалась вне кавычек.
 
Почему у тебя в выводе сначала идет echo а потом nohup, а в отрывке кода что ты показал наоборот?
 
И почему line 15? Ты запускал не совсем такой скрипт как показывал нам?
 
Если сделать полностью на весь скрипт bash -x вывод слишком большой что бы нам показывать? есть же [more=тут большой вывод]

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

Всего записей: 6198 | Зарегистр. 28-08-2008 | Отправлено: 14:33 16-02-2018
qw12



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
есть мне бы надо прочитать строку и файла, отправить ее в переменную, выполнить run.sh, записать результат, повторить со следующей и т.д.
lines=`cat config.txt`
это немного не то.

Всего записей: 292 | Зарегистр. 04-06-2001 | Отправлено: 15:05 16-02-2018
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
qw12
Ну так сразу надо писать задачу полностью и так что бы понятно было

Код:
OLDIFS=$IFS
IFS=''
while read -r line; do
  echo "line is $line"
done </path/to/your/file
IFS=$OLDIFS


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

Всего записей: 6198 | Зарегистр. 28-08-2008 | Отправлено: 15:55 16-02-2018 | Исправлено: Alukardd, 15:56 16-02-2018
CrownRU



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

Цитата:
CrownRU  
Двойные кавычки внутри двойных не работают, надо экранировать... У тебя получилось что в echo переменная $k оказалась вне кавычек.  
 
Почему у тебя в выводе сначала идет echo а потом nohup, а в отрывке кода что ты показал наоборот?  
 
И почему line 15? Ты запускал не совсем такой скрипт как показывал нам?  
 
Если сделать полностью на весь скрипт bash -x вывод слишком большой что бы нам показывать? есть же [more=тут большой вывод]
 

 
Понял, сделаю в понедельник. 15 линия это строка с find.

Всего записей: 199 | Зарегистр. 14-01-2003 | Отправлено: 22:59 16-02-2018
ASE_DAG



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

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 23:27 16-02-2018 | Исправлено: ASE_DAG, 23:33 16-02-2018
qw12



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Еще раз, как, черт возьми, это работает?
допустим

Код:
ping $line > result.txt

в переменную $line мне нужно построчно прочитать данные из файла test.txt

Цитата:
OLDIFS=$IFS
IFS=''
while read -r line; do
  echo "$line"
done <test.txt
IFS=$OLDIFS

Куда мне вставить ping $line > result.txt?
Можно прокомментировать построчно, чтобы понять логику?

Всего записей: 292 | Зарегистр. 04-06-2001 | Отправлено: 04:05 17-02-2018
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
qw12> Можно прокомментировать построчно, чтобы понять логику?
 
Упростим маленько:

while read -r; do
    printf '%s\n' "$REPLY"
done <test.txt

 
А теперь можно:

# Пока читается, читать со стандартного ввода (умолчание) построчно
# (умолчание) в переменную REPLY (умолчание), не интерпретируя ‘\’
# особо (-r).
while read -r; do
    # Напечатать переменную REPLY на стандартный вывод (умолчание).
    printf '%s\n' "$REPLY"
# Перенаправить файл с именем test.txt из текущего каталога на
# стандартный ввод цикла.
done <test.txt



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

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



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет, подскажите, pls.
 
Диспозиция:
Среда: WinXP x32 +SP3.
gAwk: GNU Awk 3.1.6
 
1. Я знаю как получить из целого положительного числа литерал «дата». Например:
Код:
gAwk.exe "BEGIN{print strftime(\"%Y.%m.%d\",0);exit}"
порождает литерал «1970.01.01».
 
2. А выражение:
Код:
gAwk.exe "BEGIN{print strftime(\"%Y.%m.%d\",systime());exit}"

порождает литерал «сегодня», например «2018.02.25».
 
Вопрос: как из такого литерала «дата» получить эквивалентное число?
(не «в лоб», через итерации)
 
Спасибо.
 
---
Удачи!
Влад.

Всего записей: 216 | Зарегистр. 14-02-2009 | Отправлено: 14:38 25-02-2018
Pasha_ZZZ



Gold Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
NvvLazyTiger
А чем date не угодил?
Цитата:
date -u -d'@0' +%Y.%m.%d
date -u  +%Y.%m.%d
 
date -u -d'1970/01/01' +%s
date -u +%s

Всего записей: 6659 | Зарегистр. 11-03-2002 | Отправлено: 15:07 25-02-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

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