Eu tenho um script Bash interativo conozcoArrays.sh
,
#!/usr/bin/bash
echo -e "\nGive me their phone number?\n"
read number
TOGOes=("$(find ~/chicas -maxdepth 1 -iname "*$number*" -type d -execdir echo {} + | sed "s;./;${HOME}/chicas/;g")"
"$(find ~/chulos -maxdepth 1 -iname "*$number*" -type d -execdir echo {} + | sed "s;./;${HOME}/chulos/;g")"
"$(find ~/parejas -maxdepth 1 -iname "*$number*" -type d -execdir echo {} + | sed "s;./;${HOME}/parejas/;g")"
)
for togo in "${TOGOes[@]}"
do
if [[ $togo != "" ]]; then
echo $togo
export togo && cd $togo && return 0
else
echo "Haven't found her in my directories." && cd ~/chicas
fi
done
que realiza uma pesquisa em meus diretórios por uma palavra-chave e, se encontrar algo, muda para esse diretório. Por isso costumo lançá-lo sourcing, assim
. ~/CS/SoftwareDevelopment/MySoftware/Bash/pasion/conozcoArrays.sh
Eu também tenho outro script Bash, todo.sh
que faz referência a 'conozcoArrays.sh':
#!/usr/bin/bash
ita='\e[3m'
end='\e[0m'
echo -e "1. La conozco?
2. Search through websites for a given phone number and create a dossier.
3. {ita}escort-scraper.py{end}"
read ch
if [[ "${ch}" == '1' ]]; then
. ~/CS/SoftwareDevelopment/MySoftware/Bash/pasion/conozcoArrays.sh
elif [[ "${ch}" == '2' ]]; then
"${HOME}/CS/SoftwareDevelopment/MySoftware/Python/escorts/search-no.py"
elif [[ "${ch}" == '3' ]]; then
"${HOME}/CS/SoftwareDevelopment/MySoftware/Python/escorts/escort-scraper.py"
fi
O problema é que, quando entro, 1
conozcoArrays.sh
não é avaliado, é iniciado, mas não parece ter origem - espero estar em um diretório diferente após a todo.sh
conclusão do script, mas não estou. Como posso obter conozcoArrays.sh
de outro script interativo?
Seu script é iniciado, como você diz, e também como você diz, não é originado porque você não o está fornecendo, você o está executando. Isso significa que o script muda de diretório, mas apenas enquanto está em execução. Quando o script sai, seu shell original não moveu o diretório.
Se você deseja que um
cd
comando dentro de um script afete o shell pai, o shell interativo a partir do qual você inicia o script, você precisa criá-lo. Portanto, em vez de executartodo.sh
, crie-o:E então ele se comportará como você deseja.