Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Передача переменных между скриптами perl и shell

Есть shell-скрипт, который вызывает скрипт на perl (в нём разбирается эл.письмо со вложенным файлом). Далее полученный файл нужно обработать снова на shell.получить имя файла можно из значения переменной перл скрипта. как из перл передать значение переменной обратно в shell ? (желательно в этот же,но можно и в другой)
Понимаю, что звучит бредово,но реализовать нужно. перл знаю на уровне "чтения со словарём".
Спасибо за любую помощь.
Ответ:

Не по теме:


Сообщение от volodin661
Marinero тебя научил 'плохому',
малейшее изменение в тексте perl ( например, какой-нить отладочный вывод) и вся конструкция
рассыплется как карточный домик ( или как ледяная зайкина избушка летом).
(google):Жили-были лиса да заяц.
У лисы была избёнка ледяная, а у зайца - лубяная.
Пришла весна-красна, у лисы избёнка расстаяла, а у зайца стоит ...
Есть подозрение, что у зайца(bash) стоял, стоит, и стоять будет.
Хотя, сломать что угодно можно.



Добавлено через 9 минут

Не по теме:


Вообще, политическая сказка с толерантным уклоном.
Спасибо, что напомнили.

Вопрос: Параллельное подключение к мультикластерному девайсу по ssh через скрипт

Здравствуйте! Есть ли идеи, как можно осуществить через скрипт параллельное подключение к мультикластерному девайсу, например, чтобы поменять у каждого кластера hwclock и date?
Ответ: К сожалению, Вы не угадали =( Не в РФ.
Вопрос: скрипт запрашивающий пароль - как сберечь?

Сказали сделать bash-скрипт, который запрашивает пароль к базе данных а потом выполняет несколько функций, SQL Loader.
Нужно сделать так, чтобы после завершения скрипта, успешного или неуспешного, или после прерывания скрипта - пороль не оказался доступен через переменные.
Т.е. сначала я сделал
read -p "Enter Password" -s -v_password

и потом передавал $v_password в вызов
sqlldr userid=name@bd/$v_password

скрипт запускается через . (т.е. source)

Оказалось, что после окончания скрипта команда echo $v_password выводит на экран введенный пароль.

Сначала долго мыкался с использованием trap "unset v_password",
а потом сделал так:
внутри скрипта функция, в ней локальная переменная l_password и запрос пароля на ввод производится изнутри функции в эту переменную.
Скрипт только вызывает эту функцию и все.
Т.е. при любом завершении скрипта пароль в локальной переменной не сохраняется.
Так можно?
Ответ:
ХБ
Vadim Lejnin
Я предпочитаю для загрузки создавать external пользователя
Тогда указывать пароль совсем не понадобится

Вы наверное работаете админом в маленькой конторке.
Я, на минуточку, developer.
В сильно большой конторе.
Это трудно объяснить тем кто не пробовал, но работа в таких environments сильно напоминает бег в мешках на Эверест со связаными руками.

Кстати, выяснился недостаток решения через функцию.
Наш супер-дупер крутой DBA не удосуживается читать deployment steps в которых сказано запускать через source и по-простому запускает скрипты через [ bash <script name>], в результате получается ошибка на оператор return.

Именно поэтому мой скрипт проверят уровень запуска
По хорошему требуется еще и проверка на повторный запуск, но это уже совсем другая история

Из опыта работы: Проект 50 физических серверов, 80 систем OeBS и 5 поддерживаемых ОС
(на то время VM не были еще так популярны)

Скажите, запуск sqlldr на стороне сервера является зоной отвественности разработчика или администратора? Или этот скрипт запускается на сервере приложений?

У Вас разработчики имеет свои учётные записи на стороне сервера БД?
Вопрос: Команда df и ее реализация через скрипт

Всем доброго времени суток.
Начал недавно разбираться с linux, с основными командами знаком, но реализация скриптов пока хромает на обе ноги.
Нужно написать скрипт, который выводит на экран инфу о жестких дисках следующим образом:
1)вывести столбцы с используемым,общим и доступным объемами 2)Подсчитать сумму для каждого столбца и перевести результат в гигабайты
Первый пункт, как я понял, так делается:
df | awk '{ print $2}' | awk '{ print $3}' | awk '{ print $4}'
Буду признателен за код для второго пункта.
Ответ: df с ключом -h выдаст "человеческие" значения объемов
Вопрос: Не отправляется почта через скрипт

Здравствуйте ув. форумчане.

Подскажите пожалуйста как решить проблему.

Если в консоли запустить echo “test-test-test” | mail s "Subject" netscout@yandex.ru то почта приходит исправно.

А Вот через ПХП скрипт никак не шлёт, лог привожу:

May 14 12:59:00 158214 sendmail[3712]: t4EAwxVK003712: Authentication-Warning: 158214.vs.webtropia.com: apache set sender to webmaster@josefin.ru using -f
May 14 12:59:00 158214 sendmail[3712]: t4EAwxVK003712: from=webmaster@josefin.ru, size=105, class=0, nrcpts=1, msgid=<201505141058.t4EAwxVK003712@158214.vs.webtropia.com>, relay=apache@localhost
May 14 12:59:00 158214 sendmail[3713]: STARTTLS=server, relay=localhost [127.0.0.1], version=TLSv1/SSLv3, verify=NO, cipher=DHE-RSA-AES256-GCM-SHA384, bits=256/256
May 14 12:59:00 158214 sendmail[3712]: STARTTLS=client, relay=[127.0.0.1], version=TLSv1/SSLv3, verify=FAIL, cipher=DHE-RSA-AES256-GCM-SHA384, bits=256/256
May 14 12:59:00 158214 sendmail[3712]: t4EAwxVK003712: to=netscout@yandex.ru, ctladdr=webmaster@josefin.ru (48/48), delay=00:00:01, xdelay=00:00:00, mailer=relay, pri=30105, relay=[127.0.0.1] [127.0.0.1], dsn=5.6.0, stat=Data format error
May 14 12:59:00 158214 sendmail[3712]: t4EAwxVK003712: t4EAwxVL003712: DSN: Data format error
May 14 12:59:00 158214 sendmail[3713]: t4EAx0HH003713: <webmaster@josefin.ru>... No such user here
May 14 12:59:00 158214 sendmail[3712]: t4EAwxVL003712: to=webmaster@josefin.ru, delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=31129, relay=[127.0.0.1], dsn=5.3.0, stat=User unknown
May 14 12:59:00 158214 sendmail[3713]: t4EAx0HH003713: from=<>, size=1129, class=0, nrcpts=0, bodytype=8BITMIME, proto=ESMTP, daemon=MTA, relay=localhost [127.0.0.1]
May 14 12:59:00 158214 sendmail[3712]: t4EAwxVL003712: t4EAwxVM003712: return to sender: User unknown
May 14 12:59:00 158214 sendmail[3713]: t4EAx0HJ003713: from=<>, size=4244, class=0, nrcpts=1, msgid=<201505141059.t4EAwxVM003712@158214.vs.webtropia.com>, bodytype=8BITMIME, proto=ESMTP, daemon=MTA, relay=localhost [127.0.0.1]
May 14 12:59:00 158214 sendmail[3712]: t4EAwxVM003712: to=postmaster, delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=32153, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (t4EAx0HJ003713 Message accepted for delivery)
May 14 12:59:00 158214 sendmail[3714]: t4EAx0HJ003713: to=root, delay=00:00:00, xdelay=00:00:00, mailer=local, pri=34537, dsn=2.0.0, stat=Sent
Ответ: проблема решена...

помогло простое удаление строки с проблемным доменом somedomain.com из файла /etc/mail/local-host-names

всем спасибо, в том числе и автору блога
Вопрос: Подлючение по ssh через скрипт

добрый день, подскажите как можно через баш скрипт подключится к серверу SSH с паролем и выполнить набор команд?ключ использовать не получится так как, каждый день новый список серверов, и еще один вопрос можно ли узнать результат работы команды например:
Bash
1
htpasswd -D file_name STRING_NAME
что бы узнать произошло ли удаление или нет, как бы тру или фолс
Ответ: Что-то вроде этого:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/expect -f
 
 
spawn ssh "root@192.168.1.2"
#######################
expect {
  -re ".*es.*o.*" {
    exp_send "yes\r"
    exp_continue
  }
  -re ".*sword.*" {
    exp_send "admin\r"
  }
}
interact
Вопрос: Копирование файлов с флешки через скрипт

Есть одно устройство на linux. В нем только 1 порт usb. Т.е. можно подключить либо клавиатуру, либо флешку.
Возможно ли написать такой скрипт, которые будет выполнять след.:

Запуск
Пауза, что бы успеть вытащить клаву и засунуть флешку
Копировать с флешки файл в какую-нибудь папку
Конец

?
Ответ: Qtmaster, вариант, использовать правило udev
погуглите, как добавить соответствующее правило в вашем дистрибутиве

можно также использовать готовое решение

у него есть опция
Bash
1
--exec-on-device DEVICE "COMMAND"  Execute COMMAND after mounting DEVICE
и другие подобные

Еще есть udisks

Ну суть понятна, мониторить и выполнять команду когда вставлен нужный девайс
Вопрос: Команды в автозагрузку. Переменные среды

Как сделать чтобы при запуске выполнялись комманды:
export LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libv4l/v4l1compat.so
export DISPLAY=:0.0
Можно скриптом, который запускается двойным кликом.
Ответ: Переменные окружения на уровне системы устанавливаются через файл /etc/environment:
Code
1
ENVIRONMENT="dev"
Установка переменной окружения для конкретного пользователя через файл ~/.bashrc или ~/.bash_profile:
Code
1
PATH="${PATH}:/home/user/bin:"
Вопрос: Запуск питоновского скрипта через anacron

Есть ссылка на python скрипт, который весьма удачно запускаеться вручную но увы не anacron'ом. Лежит в /etc/cron.daily
Code
1
lrwxrwxrwx 1 root root   33 Фев 13 20:45 remote_backup -> /home/andrew/bin/remote_backup.py
Меня слегка смущает, что в anacrontab не прописан путь к питону...
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
Может это быть как то связано с проблемой? Чтобы я тут лишнего не успел наделать ???
Ответ: Спустя продолжительное время, я все таки вышел на истинный путь. Правда пришлось породить кучу разных тем, но результат греет душу.
Долгий путь через ANACRON

1 Первое с чем я столкнулся — это run-parts. Файлы из каталогов cron.daily, cron.weekly запускаются через run-parts, который весьма чувствителен к имени файла. Имя файла не может содержать точек, пробелов и пр. специфичных символов. Детально можно прочитать в man run-parts.

2 Прописал в /etc/anacrontab свой скрипт. Все ОК. Только мой py скрипт начал глохнуть на некотором моменте. Логи нигде нельзя было посмотреть. Писало:

Feb 23 07:29:48 Mech_engineer anacron[1062]: Job `progreso.7daily' terminated (exit status: 1) (mailing output)
Feb 23 07:29:48 Mech_engineer anacron[1062]: Can't find sendmail at /usr/sbin/sendmail, not mailing output

Установил POSTFIX и стало уже легче. Теперь выхлоп пишеться в /var/mail/root (root задан как переменная окружения в /etc/anacrontabLOGNAME=root)

3 В своих новых «чудо» логах я наконец то узнал, что проблема в Python файле (напомню, даже через /etc/cron.daily все запускалось без проблем). Anacron категорически был против кириллицы. В ходе долгих скитаний, я нашёл оптимальное решение. Оказывается ANACRON запускает все со своими переменными которые прописаны в «anacrontab'e». И плевать он хотел на все остальное. И кириллицу он признал только после добавления в начало anacrontab сей переменной :
LANG=ru_UA.UTF-8
И вуаля! Все работает так, как я долго не мог дождаться

З.Ы. Спасибо всем, кто генерировал как прокатившие, так и не прокатившие идеи!
Вопрос: Чудеса с переменными в Centos 7

Всем привет.
Я написал скрипт на bash:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash
while read line
do
        IFS=","
        set -- $line
        if [ "$3" -eq 1 ]
        then
                if [ -n "$35" ]
                then
                        speed=$35
                else
                        speed=0
                fi
                curl -l -XPOST "http://localhost:8086/write?db=mydb" --data-binary "test,id=$1,dev=$12 value=$speed"
        fi
done < bpdbjobs_stat.csv
exit 0
Он берёт некоторые данные из файла в формате csv, и записывает их в базу данных. Изначально скрипт запускался на Ubuntu server, и работал там отлично. Проблемы начались, когда я запустил его на Centos 7.
Суть проблемы:
В скрипте фигурируют переменные: $1, $3, $12, $35. Так вот, переменные с двузначным индексом ($12, $35) возвращают неправильный результат. При чём по совершенно странному принципу. Допустим, переменная $12 возвращает результат $1+"2". А $35 вернёт $3+"5" соответственно.
По-моему это глюк самой системы, хотя, может быть, и у меня руки кривые. Скажите, что делать?
Ответ:
Bash
1
2
3
4
5
6
if [ -n "${35}" ] #если параметр определен
then
    speed=${35}
esle
        speed=0
fi
Добавлено через 4 минуты
Заметте и в условии и в присваивании значения переменной фигурные скобки