可能的重复:
使用脚本更改当前工作目录
我正在尝试创建一些脚本来更改主 shell/终端的工作目录。无法这样做。我尝试了以下方法
文件 p1.sh
#!/bin/bash
cd /home/mtk/work/project1
文件代码.sh
#!/bin/bash
cd /home/mtk/templates/resusable/sampleCodes
但我知道上面的内容只会改变它本身,即当前正在运行的,在这种情况下是p1.sh
or code.sh
。
请告诉我,如何更改父调用 shell 的当前工作目录。
示例运行和期望:
$ pwd
/home/mtk
$ p1.sh
$ pwd
/home/mtk ### --> Expected /home/mtk/work/project1
笔记
我的用例是:我想做一些处理,然后将提示符放置到预定义的目录中。
编辑
我知道为什么它不起作用。这alias
似乎是这种情况的解决方案。但我想扩展一下我的问题:
我需要创建一个脚本来动态更改父 shell 的工作目录。剧本会说mycd.sh
。它将具有命令行参数
mycd.sh -c/-p1/-p2/
或其他一些用户定义的参数。
给予-c
会将外壳工作目录切换到相应的目录。文件mycd.sh
看起来像
.. some processing
# parameter parsing
if [ $param1 -eq "c" ]; then
# change working dir of parent here
else
... other conditions
我想,一定有某种方法可以更改 shell 工作目录。
如果有任何不清楚的地方,请告诉我。
答案1
使用别名为此,例如
alias p1='cd /home/mtk/work/project1'
alias code='cd /home/mtk/templates/resusable/sampleCodes'
您应该将这些行放入 shell 的启动脚本中,例如 ~/.bashrc
.
另一种选择是使用外壳函数。这有点复杂; shell 函数比别名具有一些优势,但在这种情况下,您不需要这些额外的功能。
function p1 { cd /home/mtk/work/project1; }
function code { cd /home/mtk/templates/resusable/sampleCodes; }
答案2
您无法从执行 shell 更改调用 shell
其他应用程序(例如)似乎遵循操作调用 shell 的正常方法dircolors
是让脚本回显cd
(或任何)命令(而不是执行它),然后要求调用 shell 将调用包装在eval
这可能不适用于您的情况,因为您尝试做的不仅仅是在脚本中设置调用 shell,并且依赖于调用者实际知道要做什么。
例如
#!/bin/bash
#somescript.sh
echo cd /some/path
然后
eval `./somescript.sh`
出于安全考虑,它也有点令人皱眉;o)