>>2116244> Можно ли через скрипт на баше целые функции передавать приложению?
Вообще я долго втыкал в эту фразу. Конкретно в "передавать функции приложению".
Ладно, у меня есть два предположения о том, что ты мог иметь в виду.
1. функция написана на баше и надо её вызвать.
ну - это легко.
пишешь скрипт с функцией, например такой:
rakul@lucky-star /tmp $ cat fn.sh
#!/bin/bash
function rbd(){
echo "$1 need's to be about 20% cooler"
}
далее его инклюдишь вот так:
rakul@lucky-star /tmp $ . /tmp/fn.sh
и используешь функцию.
просто тест:
rakul@lucky-star /tmp $ rbd this\ thread
this thread need's to be about 20% cooler
rakul@lucky-star /tmp $
забавный тест:
rakul@lucky-star /tmp $ rbd $(whoami)
rakul need's to be about 20% cooler
rakul@lucky-star /tmp $
2. функция написана на Си и должна быть вызвана из баша.
как вариант - надо вызвать часть апи какой-то проги. в пользу этого варианта идёт упоминание тобой проприетарщины.
вот это прикольный вариант. тут мы будем уже отделять зёрна от плевел, овец от баранов а моряков от салаг :3
воспользуемся адски няшным механизмом bash loadable buildins.
качаем сорс баша:
wget
http://ftp.gnu.org/gnu/bash/bash-4.2.tar.gz // да, это нужно по возможности сделать средствами дистрибутива, но я показываю в общем виде
распаковываем, идём в нужный каталог:
tar -xf bash-4.2.tar.gz ;cd bash-4.2
делаем мейки:
./configure
собирать сам баш ннада, нам сюда:
cd examples/loadables/
тут лежат готовые buildins на которые можно посмотреть, их можно собрать и вообще они то нам и нужны.
мы не будем ходить вокруг да около, а сразу запилим свой buildin.
за основу возьмём cat.c
я сделал предельно быдляцки, потому что думать мне лень.
вот мой файл:
http://pastebin.com/raw.php?i=MTLwMRdC итак, качаем мой файл:
wget -O rbd.c
http://pastebin.com/raw.php?i=MTLwMRdC правим Makefile
надо в строки с тагитами добавитьrbd: rbd.o
$(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ rbd.o $(SHOBJ_LIBS)
думаю разберёшься.
собираем:
make rbd
(тут у меня был какой-то косяк с shell.h, в общем я в нём заменил
#include "pathnames.h"
на
#include "pathnames.h.in"
и всё прошло. думать лень.
значит собрали, получили файлы rbd.o и rbd.
rbd.o нам не нужен.
тестим наш шедевр:
enable -f ./rbd rbd
rakul@lucky-star /tmp $ rbd %username%
%username% need's to be about 20% cooler
rakul@lucky-star /tmp $ rbd $(whoami)
rakul need's to be about 20% cooler
мораль такова: мы можем вызывать сторонние функции на Си и с параметрами в том числе. скорее всего для того, чтобы вызывать куски апи неведомого проприетарного приложения придётся написать маленькую обёрточку, но это не так сложно.