대화형 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
그러면 원하는 대로 작동할 것입니다.