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

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

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

 

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

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



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

Цитата:
Необходимо передать команду именно с двойными кавычками, иначе она станет нерабочей
я добавлял доп кавычки исходя из этой фразы, которую я понял как: само значение поля в json должно остаться с кавычками внутри. Не знаю зачем но исходные условия тут обсуждать при чётком описании не вижу смысла. Хотя может изначальное понимание проблемы автором и имеет ошибку.

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

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 17:52 07-04-2023 | Исправлено: Alukardd, 17:53 07-04-2023
mithridat1



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

Цитата:
curl -s -i -X POST -H 'Content-Type: application/json-rpc' -d '{"jsonrpc": "2.0","method": "script.create", "params": {"name": "Script Name", "command": "\"path/app options\"", "type": "0", "scope": "2"}, "id": 1}'

Так у меня тоже не работает
 
Возможно, особенности самого Zabbix.
 
Добавлено:
los

Цитата:
 Почему в нижнем варианте используется ""path/app options"", а не "path/app options"?

Ну потому что значения в JSON принято оборачивать в кавычки, а мне надо передать в точности строку "path/app options"
 
Добавлено:
Alukardd
Вообще-м, одинарные кавычки у меня ни в каком виде не работают.

Всего записей: 4948 | Зарегистр. 05-01-2006 | Отправлено: 18:03 07-04-2023
useretail



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
mithridat1
похоже что это заморочки curl, а не zabbix. возможно даже и баг

Всего записей: 4640 | Зарегистр. 14-09-2007 | Отправлено: 18:10 07-04-2023
los

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

Цитата:
Ну потому что значения в JSON принято оборачивать в кавычки, а мне надо передать в точности строку "path/app options"  

налицо явное недопонимание, выполните команду
 
echo '{"jsonrpc": "2.0","method": "script.create", "params": {"name": "Script Name", "command": ""path/app options"", "type": "0", "scope": "2"}, "id": 1}' | jq
А потом выполните
 
echo '{"jsonrpc": "2.0","method": "script.create", "params": {"name": "Script Name", "command": "path/app options", "type": "0", "scope": "2"}, "id": 1}' | jq
 
Так вам будет нагляднее.
 

Всего записей: 7336 | Зарегистр. 08-09-2001 | Отправлено: 19:33 07-04-2023
mithridat1



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

Цитата:
 echo '{"jsonrpc": "2.0","method": "script.create", "params": {"name": "Script Name", "command": ""path/app options"", "type": "0", "scope": "2"}, "id": 1}' | jq  

jq такой json не признает - parse error: Invalid numeric literal at line 1, column 101
 
Второй вариант парсится корректно, но это не то что мне надо. Чтобы было понятнее скажу что в команде("command") путь с пробелам, который надо брать в кавычки, иначе команда не будет работать.

Всего записей: 4948 | Зарегистр. 05-01-2006 | Отправлено: 20:34 07-04-2023
MAGNet



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

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

кто вам такое сказал?

Код:
"command": "path/app\ with\ spaces\ options"

попробуйте
 
Добавлено:
или вот так:

Код:
"command": "path/app\\ options"

пробуйте варианты

Всего записей: 2074 | Зарегистр. 31-03-2004 | Отправлено: 20:40 07-04-2023
mithridat1



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

Цитата:
 кто вам такое сказал?  

Я!
Там путь с использованием системной переменной, бэкслэшей не навтыкаешь.
 
Вообще-то, решение мне уже дали, а выше это мы в качестве факультатива обсуждаем

Всего записей: 4948 | Зарегистр. 05-01-2006 | Отправлено: 21:01 07-04-2023
MAGNet



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
вот только что проверил, что если ему кавычку засунуть принудительно через код символа, то он сам её экранирует, так что разбирайтесь с клиентом, почему он ваших джейсонов не понимает:

Код:
 
~$ echo '{"jsonrpc": "2.0","method": "script.create", "params": {"name": "Script Name", "command": "\u0022path/app options\u0022", "type": "0", "scope": "2"}, "id": 1}' | jq
{
  "jsonrpc": "2.0",
  "method": "script.create",
  "params": {
    "name": "Script Name",
    "command": "\"path/app options\"",
    "type": "0",
    "scope": "2"
  },
  "id": 1
}
 

 
 
Добавлено:

Цитата:
Там путь с использованием системной переменной, бэкслэшей не навтыкаешь.

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

Всего записей: 2074 | Зарегистр. 31-03-2004 | Отправлено: 21:12 07-04-2023
mithridat1



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

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

Потому что команда предназначена для Windows-агентов, а там есть такие прелести как Program Files и пр.
Linux в этом плане ничуть не лучше, но там хоть пробелов в системных путях нет.

Всего записей: 4948 | Зарегистр. 05-01-2006 | Отправлено: 21:34 07-04-2023
useretail



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

Цитата:
похоже что это заморочки curl, а не zabbix. возможно даже и баг

беру свои слова обратно
 
zabbix сам и обрабатывает json
у них даже своя либа для этого есть: https://github.com/zabbix/zabbix/blob/master/src/libs/zbxjson/json.c
так что не удивлюсь если косяк именно там

Всего записей: 4640 | Зарегистр. 14-09-2007 | Отправлено: 02:32 08-04-2023
los

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

Цитата:
а при чем тут jq?  

Удобно проверять правильный ли сам файл json или загвоздка еще и в нем.

Всего записей: 7336 | Зарегистр. 08-09-2001 | Отправлено: 08:32 08-04-2023
useretail



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

Цитата:
Удобно проверять правильный ли сам файл json или загвоздка еще и в нем

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

Всего записей: 4640 | Зарегистр. 14-09-2007 | Отправлено: 13:29 08-04-2023 | Исправлено: useretail, 13:29 08-04-2023
los

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

Цитата:
вообще, да, но поскольку тут явный баг (нужны двойные кавычки), посторонний парсер никак не помогает в его выявлении  
сам json валидный, но вот что происходит после передачи из баша это вопрос. можно было-бы отдебажить, но мне лень

нет, обсуждавшийся json был изначально неверным. Как искать где проблема без программ подобных jq?

Всего записей: 7336 | Зарегистр. 08-09-2001 | Отправлено: 16:55 08-04-2023
useretail



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
los
я подразумеваю что json изначально валидный

Всего записей: 4640 | Зарегистр. 14-09-2007 | Отправлено: 17:06 08-04-2023
los

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
useretail, видимо вы значительно лучше меня разбираетесь в этом вопросе, я определить на глаз валидный json или нет не могу.
 
Интересно если использовать привычный для curl вариант '"path/app%20options"' это что-то изменит?

Всего записей: 7336 | Зарегистр. 08-09-2001 | Отправлено: 17:24 08-04-2023
Skif_off

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

Код:
 
#!/bin/sh
 
if [ $# -lt 1 ]; then
  app
else
  app "$@"
fi

сработает по крайней мере в ходовых командных оболочках, если не брать откровенную экзотику?
 
Добавлено:
Похоже, тут достаточно заменить условный оператор на строку

Код:
app "$@"

Всего записей: 6489 | Зарегистр. 28-01-2008 | Отправлено: 21:45 15-05-2023
MAGNet



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Skif_off
что вы пытались тут сделать? =)
если
Код:
$# -lt 1
то
Код:
$@
и так будет пустой строкой, так что..

Цитата:
Похоже, тут достаточно заменить условный оператор на строку

верно

Всего записей: 2074 | Зарегистр. 31-03-2004 | Отправлено: 04:07 16-05-2023 | Исправлено: MAGNet, 04:09 16-05-2023
Skif_off

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

Всего записей: 6489 | Зарегистр. 28-01-2008 | Отправлено: 17:39 16-05-2023
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть папки со структурой: /export/gorod, /import/gorod и т.д. хочу переделать наоборот, чтобы сначала был город, а ниже категория /gorod/export, /gorod/import. Ломать пока старую схему не хочу, поэтому в новую папку надо подмонтировать папки с оригинала. В каждом городе внутренние папки по названию одинаковые.
 
Как вариант сделал так, цикл на отдельный город, можно ли привести к единому циклу, т.к. потом возможно будет добавлена проверка на монтирование, еще строк добавится ?

Код:
 
mkfolder(){
    array_gorod=("gorod1" "gorod3" "gorod9" "gorod15" "gorod18")
    array_folder=("export" "import" "render" "full" "check" "shablon")
 
    for i in "${array_gorod[@]}"; do
        for k in "${array_folder[@]}"; do
        if [ ! -d /tmp/test_arr/"${i}/${k}" ]; then mkdir -p /tmp/test_arr/"${i}/${k}"; fi
        done
    done
 
    for m_g1 in "${array_folder[@]}"; do
        echo "in: "/$m_g1/gorod1" ; out: /gorod1/$m_g1"
    done
 
    for m_g2 in "${array_folder[@]}"; do
        echo "in: "/$m_g2/gorod2" ; out: /gorod2/$m_g2"
    done
}
 
mkfolder
 
 

Всего записей: 354 | Зарегистр. 19-04-2003 | Отправлено: 19:30 16-06-2023 | Исправлено: digital422, 19:32 16-06-2023
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422
сейчас оно выглядит как import/gorod1 import/gorod2 и т.д.?

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

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 20:53 17-06-2023
Открыть новую тему     Написать ответ в эту тему

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