我刚刚发现这个非常有用的shell脚本,在这里左右,但遗憾的是它不工作在Mac OS X 10.5。
这是有问题的脚本(复制它的方便):
#!/bin/bash
LIMIT=$1
P=$PWD
for ((i=1; i <= LIMIT; i++))
do
P=$P/..
done
cd $P
我想echo $P
在最后和它的返回了正确的道路,但仍然cd $P
似乎并不奏效。
于是,我就手动输入P="some/path"
和cd $P
在终端和它的工作。
我不明白为什么同样的命令,没有在剧本工作。 难道是一个安全的事情吗?
有什么建议?
我已经在Linux上同样的问题,其实,如果我理解正确的是什么,我经过一番搜索发现,这是发生了什么:
该命令在子shell中推出,并且在子shell路径得到改变,你看不到变化,因为当脚本完成,然后再回到起始(父)的外壳。
我解决了这个通过把有用的脚本在我的.bashrc的功能,就像这样:
up(){
#code goes here
}
另一种选择是在每次启动它的时间来执行此脚本,但我更喜欢第一个。
一旦shell脚本结束它将把你的右后卫在它从执行的目录。 CD将只影响脚本进程的CWD
你只改变工作目录中运行该脚本的解释,而不是你从启动脚本中的原装外壳程序外壳的副本。
对于bash类似的外壳,以运行在交互式shell会话操作命令序列,可以将它们定义为一个壳的功能。
例如,键入以下
up() { LIMIT=$1; P=$PWD; for ((i=1; i <= LIMIT; i++)); do P=$P/..; done; cd $P; }
你会定义了命令的工作您预期的方式。
你可以把这个函数定义为当您登录时,如.bashrc中,以保持其在登录时方便地定义为源文件。
如果你想你的当前shell的上下文中运行该脚本只是做下列之一(假设你的shell脚本被称为CDUP)
. cdup 3
source cdup 3
源命令(和它的别名)。当前shell的上下文中运行提供的脚本,即它们不启动单独的子shell来运行命令,以便您的CD将工作,因为它是当前壳内
一个小除了向上() - 功能; 添加测试没有价值:
LIMIT = $ 1
如果[-z “$ LIMIT”]; 然后
LIMIT = 1
科幻
并没有更多的“CD ..” - 刚刚“向上”