exec bash最后使用

exec bash最后使用

我想运行一个脚本来简单地更改当前工作目录:

#!/bin/bash
cd web/www/project

但是,运行后,当前的 pwd 保持不变!我怎样才能做到这一点?

答案1

这是预期的行为。该脚本在子 shell 中运行,无法更改父 shell 工作目录。当它结束时,它的效果就会消失。

要永久更改当前 shell 的目录,您应该使用该source命令,也简单地别名为.,它在当前 shell 环境而不是子 shell 中运行脚本。

以下命令是相同的:

. script

或者

source script

答案2

对于像这样的小任务,不要创建脚本,而是创建一个像这样的别名,

$ alias cdproj='cd /dir/web/www/proj'

.bashrc如果您希望为每个交互式 shell 设置它,您应该将其添加到您的文件中。

现在您可以将其运行为$ cdproj.

答案3

exec bash最后使用

bash 脚本在其当前环境或其子环境中运行,但绝不会在其父环境中运行。

然而,这个问题经常被问到,因为人们想要执行后留在某个目录的bash提示符下来自另一个目录的 bash 脚本。

如果是这种情况,只需在脚本末尾执行一个子 bash 实例即可:

#!/usr/bin/env bash
cd desired/directory
exec bash

这将创建一个新的子 shell。输入Ctrl+Dexit返回到最初启动脚本的第一个 shell。

更新:$SHELL最后使用

至少对于较新版本的bashexec不再需要最后一行。此外,通过使用环境变量,可以使脚本与任何首选的 shell 一起工作$SHELL。然后给出:

#!/usr/bin/env bash
cd desired/directory
$SHELL

答案4

虽然有一些答案可以执行您想要的确切操作,但用于此目的的更标准方法是创建符号链接:

ln -s ~/web/www/project proj   #use full path to dir!

然后你可以cd使用名称进入目录proj

cd proj

此方法更灵活,因为您可以使用短名称访问文件,而无需cd

ls proj/   #note the endslash!
vim proj/file.x

相关内容