他の対話型BashスクリプトからBashスクリプトを取得するにはどうすればよいですか?

他の対話型BashスクリプトからBashスクリプトを取得するにはどうすればよいですか?

インタラクティブなBashスクリプトがあります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

私のディレクトリでキーワードを検索し、何でも見つかった場合は、このディレクトリに変わります。だから私は通常このようなものを調達しながら始めます。 . ~/CS/SoftwareDevelopment/MySoftware/Bash/pasion/conozcoArrays.sh

todo.sh"conozcoArrays.sh"を参照する別のBashスクリプトがあります。

#!/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

問題は、1 conozcoArrays.sh unevaluatedと入力すると開始されますが、ソースがないようです。todo.shスクリプトが完了した後、別のディレクトリにあると予想しましたが、そうではありません。conozcoArrays.sh他の対話型スクリプトからリソースを取得するにはどうすればよいですか?

答え1

おっしゃるようにスクリプトが始まり、おっしゃるようにソーシングされないため、ソーシングされずに実行されます。これは、スクリプトがディレクトリを変更しますが、実行中にのみ変更されることを意味します。スクリプトが終了すると、元のシェルはまだディレクトリを移動していません。

cdスクリプトのコマンドが親シェル(スクリプトを起動した対話型シェル)に影響を与えるようにするには、それをインポートする必要があります。したがって、実行する代わりにtodo.shソースを使用してください。

. /path/to/todo.sh

その後、必要に応じて動作します。

関連情報