Shell脚本在文件系统中上升N个文件夹

And*_*ann 1 macos bash shell

我刚刚在SO上找到了这个非常有用的shell脚本,但遗憾的是它不适用于Mac OS X 10.5.

这是有问题的脚本(为方便起见,将其复制):

#!/bin/bash
LIMIT=$1
P=$PWD
for ((i=1; i <= LIMIT; i++))
do
    P=$P/..
done
cd $P
Run Code Online (Sandbox Code Playgroud)

我试图echo $P在最后,它正在返回正确的道路,但cd $P似乎仍然没有工作.

所以我尝试手动输入P="some/path"cd $P在终端中工作.

我不明白为什么相同的命令在脚本中不起作用.这可能是安全的事吗?

有什么建议?

Alb*_*gni 5

我在Linux上遇到了同样的问题,实际上,如果我正确理解我在搜索后发现的内容,就会发生以下情况:

该命令在子shell中启动,在子shell中路径发生变化,您没有看到更改,因为当脚本完成后,您将返回到起始(父)shell.

我通过在我的.bashrc中将有用的脚本作为函数来解决这个问题,如下所示:

up(){
    #code goes here
}
Run Code Online (Sandbox Code Playgroud)

另一种选择是每次启动脚本时都会获取脚本,但我更喜欢第一个脚本.

  • 默认情况下,OS X终端中没有运行.bashrc的原因可能是因为您的终端正在打开shell作为登录shell.Bash将shell区分为登录/非登录shell,以及交互式或非交互式shell,具体取决于它的启动方式,这会影响它将运行的启动文件的顺序和名称.详细信息在bash手册页中,但粗略地说,"profile"是针对登录shell运行的,而".bashrc"是针对交互式非登录shell运行的. (4认同)