Son*_*tos 93 scripting bash cd-command environment-variables
我想运行一个脚本来简单地更改当前工作目录:
#!/bin/bash
cd web/www/project
Run Code Online (Sandbox Code Playgroud)
但是,运行后,当前密码保持不变!我怎样才能做到这一点?
enz*_*tib 123
这是预期的行为。该脚本在子 shell 中运行,不能更改父 shell 工作目录。当它完成时,它的效果就会消失。
要永久更改当前 shell 的目录,您应该使用该source命令,也简称为.,它在当前 shell 环境而不是子 shell 中运行脚本。
以下命令是相同的:
. script
Run Code Online (Sandbox Code Playgroud)
或者
source script
Run Code Online (Sandbox Code Playgroud)
Sac*_*kar 45
对于这样的小任务,与其创建脚本,不如创建一个像这样的别名,
$ alias cdproj='cd /dir/web/www/proj'
Run Code Online (Sandbox Code Playgroud)
.bashrc如果您希望为每个交互式 shell 设置它,您应该将它添加到您的文件中。
现在您可以将其作为$ cdproj.
Ser*_*ndt 28
exec bash末bash 脚本在其当前环境或其子环境中运行,但从不在其父环境中运行。
然而,这个问题经常被问到,因为在从另一个目录执行bash 脚本后,人们希望留在某个目录中的 bash 提示符。
如果是这种情况,只需在脚本末尾执行一个子 bash 实例:
#!/usr/bin/env bash
cd desired/directory
exec bash
Run Code Online (Sandbox Code Playgroud)
这将创建一个新的子外壳。键入Ctrl+D或exit返回到最初启动脚本的第一个 shell。
$SHELL末至少对于较新版本的bash,exec不再需要最后一行的 。此外,可以通过使用$SHELL环境变量使脚本与任何首选的 shell 一起工作。这然后给出:
#!/usr/bin/env bash
cd desired/directory
$SHELL
Run Code Online (Sandbox Code Playgroud)
小智 14
取决于您要做什么,另一种解决方案可以是创建函数而不是脚本。
例子:
在文件中创建一个函数,让我们说/home/aidin/my-cd-script:
function my-cd() {
cd /to/my/path
}
Run Code Online (Sandbox Code Playgroud)
然后将其包含在您的bashrc或zshrc文件中:
# Somewhere in rc file
source /home/aidin/my-cd-script
Run Code Online (Sandbox Code Playgroud)
现在你可以像命令一样使用它:
$ my-cd
Run Code Online (Sandbox Code Playgroud)
小智 11
虽然有些答案可以执行您想要的确切操作,但用于此目的的更标准方法是创建符号链接:
ln -s ~/web/www/project proj #use full path to dir!
Run Code Online (Sandbox Code Playgroud)
然后你可以cd使用名称进入目录proj:
cd proj
Run Code Online (Sandbox Code Playgroud)
此方法更灵活,因为您可以使用短名称访问文件而无需cd:
ls proj/ #note the endslash!
vim proj/file.x
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
257459 次 |
| 最近记录: |