インタラクティブな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
その後、必要に応じて動作します。