Size: a a a

2021 June 01

EK

Evgeny Kuchkov in pro.bash
f() {
declare -n localarr=${1}
localarr['key1']=''
localarr['key2']=''
...
localarr['keyN']=''
}

declare -A myarray
f myarray
источник

EK

Evgeny Kuchkov in pro.bash
как избавиться от declare -A myarray ?
источник

EK

Evgeny Kuchkov in pro.bash
можно что-нибудь засунуть в функцию чтобы дергать просто f myarray и баш бы понимал что это массив?
источник

EK

Evgeny Kuchkov in pro.bash
без объявления заранее
источник

F

Fljúgandi Kettlingur... in pro.bash
даже если можно, программа выглядит нагляднее с явным объявлением переменной
источник

∀lǝxǝʎ in pro.bash
на основе чего он должен понимать-то? Варианта 2, либо на основе имени, либо на основе содержимого.
источник

EK

Evgeny Kuchkov in pro.bash
ну... не больно то и хотелось
источник

EK

Evgeny Kuchkov in pro.bash
видимо я не очень улавливаю чего-то по теории
я написал функцию, запилил её в /root/.bashrc
теперь я хочу в своих кронтабовских скриптах её дергать, но мне выдается отлуп
./1.sh: line 3: get_creds: command not found

при этом если я пропишу в 1.sh
source /usr/local/ky4k0b/.bashrc
то все работает
источник

EK

Evgeny Kuchkov in pro.bash
я могу конечно этот get_creds положить как отдельный скрипт куда-нидуль в PATH, но хочется понять почему не работают функции из .bashrc
источник

F

Fljúgandi Kettlingur... in pro.bash
Потому что в крон не создается интерактивная сессия и не вызывается .basrc
источник

EK

Evgeny Kuchkov in pro.bash
эм, хорошо
почему тогда так не работает?
root@mpro-rt-1:~# type get_creds
get_creds is a function
get_creds ()
{
...
}
root@mpro-rt-1:~# cat 1.sh
#!/bin/bash

declare -A creds && get_creds creds
root@mpro-rt-1:~# cat 1.sh ^C
root@mpro-rt-1:~# ./1.sh
./1.sh: line 3: get_creds: command not found
root@mpro-rt-1:~#
источник

EK

Evgeny Kuchkov in pro.bash
тут без крона, я просто дергаю руками скрипт из своего активного шелла
источник

аᶘ

асоциальный пикотран... in pro.bash
Потому что в шелле не наследуются алиасы и функции, следовательно и в твоем скрипте нет этой функцию. В баше есть возможность "экспортировать" функции, происходит это через environment variables (неявно).
источник

аᶘ

асоциальный пикотран... in pro.bash
→ ololo() { printf "123\n"; }
→ ololo
123
→ export -f ololo
→ bash
→ ololo
123
→ env | grep ololo
BASH_FUNC_ololo%%=() {  printf "123\n"
источник

EK

Evgeny Kuchkov in pro.bash
да, добавил к конец .bashrc
export -f get_creds и все заработало
источник

EK

Evgeny Kuchkov in pro.bash
какие-то подводные камни у этого метода есть?
источник

аᶘ

асоциальный пикотран... in pro.bash
ну вообще я бы, конечно, вынес содержимое функции в отдельный скрипт с аналогичным именем и положил в ~/.local/bin
(ну и PATH прописал бы туда)
на мой взгляд это было бы более «нативно», чем юзать БАШИЗМ
источник

EK

Evgeny Kuchkov in pro.bash
ну кроме того что у меня env сейчас не влазит в экран
источник

аᶘ

асоциальный пикотран... in pro.bash
скорее всего никаких, просто выглядит странно, как по мне
источник
2021 June 02

зк

захар который... in pro.bash
Никак не получается заставить скопировать выделенные файлы в sxiv (для последующей вставки в Браузер/Телеграм). Копируются только по одному. А нужно скопировать все выделенные файлы.
источник