shell脚本,文件系统进入N个文件夹(Shell Script that goes up N fo

2019-08-02 11:39发布

我刚刚发现这个非常有用的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在终端和它的工作。

我不明白为什么同样的命令,没有在剧本工作。 难道是一个安全的事情吗?

有什么建议?

Answer 1:

我已经在Linux上同样的问题,其实,如果我理解正确的是什么,我经过一番搜索发现,这是发生了什么:

该命令在子shell中推出,并且在子shell路径得到改变,你看不到变化,因为当脚本完成,然后再回到起始(父)的外壳。

我解决了这个通过把有用的脚本在我的.bashrc的功能,就像这样:

up(){
    #code goes here
}

另一种选择是在每次启动它的时间来执行此脚本,但我更喜欢第一个。



Answer 2:

一旦shell脚本结束它将把你的右后卫在它从执行的目录。 CD将只影响脚本进程的CWD



Answer 3:

你只改变工作目录中运行该脚本的解释,而不是你从启动脚本中的原装外壳程序外壳的副本。

对于bash类似的外壳,以运行在交互式shell会话操作命令序列,可以将它们定义为一个壳的功能。

例如,键入以下

up() { LIMIT=$1; P=$PWD; for ((i=1; i <= LIMIT; i++)); do P=$P/..; done; cd $P; }

你会定义命令的工作您预期的方式。

你可以把这个函数定义为当您登录时,如.bashrc中,以保持其在登录时方便地定义为源文件。



Answer 4:

如果你想你的当前shell的上下文中运行该脚本只是做下列之一(假设你的shell脚本被称为CDUP)

. cdup 3 
source cdup 3

源命令(和它的别名)。当前shell的上下文中运行提供的脚本,即它们不启动单独的子shell来运行命令,以便您的CD将工作,因为它是当前壳内



Answer 5:

一个小除了向上() - 功能; 添加测试没有价值:

LIMIT = $ 1
如果[-z “$ LIMIT”]; 然后
LIMIT = 1
科幻

并没有更多的“CD ..” - 刚刚“向上”



文章来源: Shell Script that goes up N folders in the file system
标签: macos bash shell