2011-10-20 64 views
0

我想使用bash文件在linux中更改目录。以下是使用的代码片段。使用bash更改目录'cd'

#!/bin/bash 
alias proj="cd /home/prag/Downloads" 

但是在运行bash文件时没有响应,即它保持在同一目录中。为何如此。?为什么别名在这里工作,或者我应该做一些不同的事情?

回答

4

运行bash文件将不会工作,因为对当前工作目录的更改保留在脚本中(因为它是向您提供命令提示符的进程的独立进程 - bash)。

将别名添加到〜/ .bash_aliases或〜/ .bashrc文件(前者更可取,如果前者不存在,后者可能更快),然后它应该可以工作。

+0

感谢您的清除。你能帮我写下别名吗? – SyncMaster

+0

你已经写过。只需将'alias proj =“cd/home/prag/Downloads”'复制到.bash_aliases或.bashrc文件中即可。保存它然后关闭您的终端并重新打开它,并且您的命令应该工作。 – 2011-10-20 16:00:17

+0

@pragadheesh:如果这回答了您的问题,您能否将其标记为答案?谢谢。 – 2011-10-20 16:36:49

2

每个进程都有自己的当前目录。当你启动一个bash脚本,并且它改变它的当前目录然后存在时,这对父进程(即启动脚本的shell)没有影响。

而不是运行./script.sh,请尝试source ./script.sh(或简称. ./script.sh)。

此外,为cd定义alias将不会自行更改目录。我假设你实际上在别处调用别名。

0

你是说你想写一个bash脚本来cd到另一个目录吗?

那么为什么要使用别名?只需使用“cd”命令!

+0

速度。如果你进入那个目录很多,那么别名就有意义了。我有一个小程序和bash_aliases条目用于存储终端'书签'。我只需键入'pj foo',它就会将我带到存储的名称中。 – 2011-10-20 15:40:56

0

这是因为你的脚本是在一个新的shell进程中执行的,当你把它叫做./cd.sh。 因此,您的脚本将更改该子shell中的目录,并且当您的脚本退出时,控件将返回到您的以前的shell。

你可以这样调用你的脚本. cd.sh - 这会在当前shell中执行脚本,并且cd命令可以工作。