Fre*_* J. 0 bash cd-command shell-script
在 Mac 终端上运行的这个 bash 文件无法更改目录。而是在实际存在时报告它不存在。我做错了什么吗?
#!/usr/bin/env bash
set -e
read name
APPLICATION_PATH="~/Documents/meteor/apps/$name"
cd "${APPLICATION_PATH}"
Run Code Online (Sandbox Code Playgroud)
有两点:
对于波浪号部分,超级用户最近的一个问题是关于同样的问题(https://superuser.com/questions/1161493/why-bash-script-wont-extend-bashrc/1161496#1161496)
波浪号在变量之前展开,因此 cd 找不到路径。为了克服这个问题,请使用以下命令引导命令eval:
eval cd "${APPLICATION_PATH}"
Run Code Online (Sandbox Code Playgroud)
不幸的是,当你执行脚本时(我的意思是,如果它被修改为“+x”,调用路径),你会看到 $PWD 在“当前外壳”中没有改变。但是,如果您在脚本末尾添加这样一行
ls
Run Code Online (Sandbox Code Playgroud)
您将看到,ls在新的工作目录中执行。怎么来的?
简短回答:source 将在当前 shell 进程中运行命令。执行将在新的 shell 进程中运行命令。仍然困惑?那么请继续阅读长答案。
很快,要在当前 shell 中更改 $PWD,您应该“源”脚本如下:
source /path/to/script
Run Code Online (Sandbox Code Playgroud)
或者
. /path/to/script
Run Code Online (Sandbox Code Playgroud)
第三点:如果你不想弄乱sourceor .,你可以在你的 ~/.bashrc 中定义一个别名(/sf/ask/52676781/ -源命令):
别名 mycmd="源 mycmd.sh"
| 归档时间: |
|
| 查看次数: |
16682 次 |
| 最近记录: |