如何从另一个交互式 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

我还有另一个 Bash 脚本,todo.sh它引用“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

问题是,当我输入1 conozcoArrays.sh 未评估时,它会启动,但似乎没有来源 - 我希望在todo.sh脚本完成后位于不同的目录中,但我没有。我如何conozcoArrays.sh从另一个交互式脚本中获取资源?

答案1

正如您所说,您的脚本已启动,而且正如您所说,它不是来源的,因为您没有来源它,您正在执行它。这意味着脚本确实会更改目录,但仅在其运行时更改。当脚本退出时,您的原始 shell 尚未移动目录。

如果您希望cd脚本中的命令影响父 shell(启动脚本的交互式 shell),则需要获取它。因此,不要运行 ,而是todo.sh使用 source :

. /path/to/todo.sh

然后它就会按照你想要的方式运行。

相关内容