不使用“exec”移动到文件夹

不使用“exec”移动到文件夹

在我的虚拟机中,我的项目位于 /var/www/vhosts/projectname/httpdocs/。
当我启动机器时,我从 /home/vagrant/ 开始。

我创建了一个脚本,可以立即将我带到我想要的项目。问题是,该脚本使用 exec 并在每次使用时创建一个新会话。

这是我的代码:

#!/usr/bin/env zsh

if [ -z "$1" ]; then
   echo "No project specified"
   exit 1
fi

cd /var/www/vhosts/"$1"/httpdocs/ || exit

echo "---------------------"
echo "Project: $1"
echo "  https://$1.vm/"
echo "  https://$1.vm/typo3"
echo "---------------------"

exec zsh

有没有其他方法可以设置当前路径而不创建新会话?
谢谢

答案1

脚本确实在子 shell 中运行,其中当前目录发生更改。脚本结束时,此环境将被终止。exec zhs需要打开交互式 shell ( ) 才能与修改后的环境进行交互,这会打开除脚本正在运行的子 shell 之外的另一个子 shell。

用一个shell 函数可能最适合您想做的事情。

changedir () {
   cd "$1"
   echo "Project: $1"
}

~/.zshrc在您的文件中包括此类函数(.bashrc适用于 bash 用户)。当您退出并重新打开终端时,该命令changedir将可用。

或者你应该获取脚本而不是执行它。也可以通过定义别名来优雅地实现:

alias changedir='source <pathname of your script>'

~/.zshrc此外,还应在(或)中包含别名定义~/.bashrc以保持持久性。与之前的方法类似,changedir可以使用 自动完成的命令Tab

对于更常见的用例,您只想轻松切换到树中深处的某些目录,请参阅更多选项这里

相关内容