다른 대화형 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

그러면 원하는 대로 작동할 것입니다.

관련 정보