我想使用bash文件在linux中更改目录。以下是使用的代码片段。使用bash更改目录'cd'
#!/bin/bash
alias proj="cd /home/prag/Downloads"
但是在运行bash文件时没有响应,即它保持在同一目录中。为何如此。?为什么别名在这里工作,或者我应该做一些不同的事情?
我想使用bash文件在linux中更改目录。以下是使用的代码片段。使用bash更改目录'cd'
#!/bin/bash
alias proj="cd /home/prag/Downloads"
但是在运行bash文件时没有响应,即它保持在同一目录中。为何如此。?为什么别名在这里工作,或者我应该做一些不同的事情?
运行bash文件将不会工作,因为对当前工作目录的更改保留在脚本中(因为它是向您提供命令提示符的进程的独立进程 - bash)。
将别名添加到〜/ .bash_aliases或〜/ .bashrc文件(前者更可取,如果前者不存在,后者可能更快),然后它应该可以工作。
每个进程都有自己的当前目录。当你启动一个bash脚本,并且它改变它的当前目录然后存在时,这对父进程(即启动脚本的shell)没有影响。
而不是运行./script.sh
,请尝试source ./script.sh
(或简称. ./script.sh
)。
此外,为cd
定义alias
将不会自行更改目录。我假设你实际上在别处调用别名。
你是说你想写一个bash脚本来cd到另一个目录吗?
那么为什么要使用别名?只需使用“cd”命令!
速度。如果你进入那个目录很多,那么别名就有意义了。我有一个小程序和bash_aliases条目用于存储终端'书签'。我只需键入'pj foo',它就会将我带到存储的名称中。 – 2011-10-20 15:40:56
这是因为你的脚本是在一个新的shell进程中执行的,当你把它叫做./cd.sh
。 因此,您的脚本将更改该子shell中的目录,并且当您的脚本退出时,控件将返回到您的以前的shell。
你可以这样调用你的脚本. cd.sh
- 这会在当前shell中执行脚本,并且cd命令可以工作。
感谢您的清除。你能帮我写下别名吗? – SyncMaster
你已经写过。只需将'alias proj =“cd/home/prag/Downloads”'复制到.bash_aliases或.bashrc文件中即可。保存它然后关闭您的终端并重新打开它,并且您的命令应该工作。 – 2011-10-20 16:00:17
@pragadheesh:如果这回答了您的问题,您能否将其标记为答案?谢谢。 – 2011-10-20 16:36:49