`
xitong
  • 浏览: 6187858 次
文章分类
社区版块
存档分类
最新评论

pushd,popd,dirs–Bash实现

 
阅读更多
#!/bin/bash 
#实现pushd popd dirs功能

#mypush函数实现pushd命令的功能,每次支持压栈一个目录
#缺省目录是当前目录,所有目录保存在_DIR_STACK变量中,
#以:做为分隔符。
function mypush()
{
	REQ="$1"	#接受参数1是目录参数
	REQ="${REQ:-.}"	#如果参数1是空,则
	if [ ! -d $REQ ]; then #如果参数是非目录
		echo "$REQ is not a directory"
		return 1
	fi

	if cd "$REQ" ; then #切换目
		_DIR_STACK="`pwd`:$_DIR_STACK"; #把参数添加到_DIR_STACK变量中
		mydirs	#显示栈中的目录
	else
		echo "ERROR : Cannot change to directory $REQ."
		return 1
	fi 

	unset REQ
}

function mypopd()
{
	_DIR_STACK=$_DIR_STACK
	mydirs	
	TEMP_PATH=`echo $_DIR_STACK | cut -d: -f1` #指定_DIR_STACK中的第一个项(目录)
	if [ ! -z "$TEMP_PATH" ]; then #判断目录是否为空,若是空,则说明栈是空
		if cd "$TEMP_PATH" ; then
			_DIR_STACK=`echo $_DIR_STACK | cut -d: -f1 --complement` #保存除了第一个目录外剩下的目录
		else
			echo "Error : change directory failed !"
			return 1
		fi
	else
		echo "Error : Stack is empty ! "
		return 1
	fi
}

#mydirs函数是dirs命令的实现代码
function mydirs()
{
	OLDIFS="$IFS" #保存原先的分隔符号
	IFS=":"	#指定分隔符号是:
	for i in $_DIR_STACK
	do
		printf  "$i \t" #打印出栈中目录	
	done
	IFS="$OLDIFS"
}
通过$ source stack.sh来执行脚本
mypush [路径] 来进行压栈操作
mydirs 来显示栈中目录项目
mypop 直接压出栈中最上面一个目录

分享到:
评论

相关推荐

    Pushd、Popd、dirs:Unix 风格的 pushd、popd 和 dirs 的 MATLAB 实现。-matlab开发

    pushd、popd 和 dirs 实现了一个 unix 风格的目录栈。 它使用一个全局变量来保存堆栈。 用法示例: > cd myDir myDir> pushd('anotherDir') anotherDir> %excute 命令在这里另一个目录> 目录目录另一个目录> popd ...

    pushd、popd 和 dirs:用于在目录之间移动的快捷方式,如 Unix pushd、popd 和 dirs 命令。-matlab开发

    是否曾经希望在Matlab中实现Unix命令push,popd和dirs的实现? 他们来了。 像 cd 一样使用 pushd。 唯一的区别是:每次使用 pushd 时,您留下的目录都会保存在堆栈中。 要返回,只需键入 popd,它会将您带到堆栈...

    linux shell之pushd、popd和dirs的使用讲解

    今天小编就为大家分享一篇关于linux shell之pushd、popd和dirs的使用讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    pushd.vim:Vim的push,popd和dirs的小实现

    小型实现push / popd / dirs 像外壳中的推入式,弹出式和脏式一样? 现在,您可以在vim中执行相同的操作。 我写这篇文章是为了拥有一个不错的小脚本,以便在vim中使用push和popd。 还有其他插件,但是它们很大,并且...

    pushd:pushd 和 popd 的 MATLAB 版本,均可在 UNIX/Linux 和 DOS 中使用。 添加一些特定于 Matlab 的专长-matlab开发

    PUSHD(directory/file-spec) 存储当前工作目录并将当前目录更改为字符串 directory-spec 中指定的目录。 要返回存储目录调用 POPD,请... PUSHD 和 POPD 这两个文件旨在模仿 UNIX/Linux 和 DOS 中具有相同名称的函数。

    matlab开发-PushdPopddirs

    matlab开发-PushdPopddirs。unix风格的pushd、popd和dirs的matlab实现。

    matlab开发-按下按钮和目录

    matlab开发-按下按钮和目录。用于在目录之间移动的快捷方式,如unix pushd、popd和dirs命令。

    pushd, 快速的多协议移动和网络推送通知服务.zip

    pushd, 快速的多协议移动和网络推送通知服务 通用移动推送守护进程这就是一个可以向移动本地应用程序发送服务器端通知的服务器,你可以从一个入口点向任何支持的移动平台,网络应用程序或者HTTP服务器发送推送通知。...

    ubuntu-编译时出现-bin-sh-1-pushd- not found.pdf

    ubuntu ubuntu_编译时出现_bin_sh_1_pushd_ not found

    批处理学习笔记

    自学批处理笔记(14)assoc ftype pushd popd call shift 批处理的练习(1) 批处理的练习(2)图形界面的制作 自学批处理笔记(15)find findstr 批处理练习(3) 文件处理 制作进度条 判断字符长度 自学批处理笔记...

    bash-cd:带有加权标记的 cd

    这是一个功能类似于Bash的pushd和popd内置命令的脚本。 每次更改目录时,它都会通过添加新条目或增加现有条目的权重来更新书签文件。 分数最高的标记位于文件的顶部,因此它们首先匹配。 格式为:权重目录(可选...

    linux命令切换目录的使用方法

    切换目录的方式有很多种,最常用的莫过于cd 命令了,这里介绍四个命令pushd,popd,dirs,cd -的使用方法

    CMD命令行高级教程

    12、pushd 和 popd 13、CALL 14、shift 15、IF 16、setlocal 与 变量延迟 (ENABLEDELAYEDEXPANSION / DISABLEDELAYEDEXPANSION 启动或停用延缓环境变量扩展名。) 17、ATTRIB 显示或更改文件属性 第二节 常用...

    Linux系统中巧用CD和Pushd切换目录

    在Linux的多目录命令提示符中工作是一种痛苦的事情,在Linux命令提示中,可以用cd命令来改变当前目录。用pushd实现在不同目录间切换。文中介绍了利用cd和pushd切换目录的技巧有助于你节省时间和精力。

    DOS批处理高级教程精选

    批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD。这些命令统称批处理命令。...12、pushd 和 popd 13、CALL 14、shift 15、IF 16、setlocal 与 变量延迟

    Linux操作系统中巧用CD和Pushd切换目录

    在Linux的多目录命令提示符中工作是一种痛苦的事情,但以下这些利用cd和pushd切换目录的技巧有助于你节省时间和精力。本文介绍了Linux操作系统中巧用CD和Pushd切换目录的方法。

    DOS批处理高级教程精选合编

    12、pushd 和 popd 13、CALL 14、shift 15、IF 16、setlocal 与 变量延迟 17、ATTRIB 显示或更改文件属性 第二节 常用特殊符号 1、@ 命令行回显屏蔽符 2、% 批处理变量引导符 3、> 重定向符 4、>> ...

    pushd:开源分布式pubsubIM服务器

    推开源分布式pubsub / IM服务器 _ _ _ __ _ _ ___| |__ __| | | '_ \| | | / __| '_ \ / _` | | |_) | |_| \__ \ | | | (_| | | .__/ \__,_|___/_| |_|\__,_| |_| 安装无需执行任何操作,只需使用bin / pushd.linux...

    批处理教程.rar

    第一章批处理基础 第一节常用批处理内部命令简介 1、REM 和:: 2、ECHO 和@ 3、PAUSE ...12、pushd 和popd 13、CALL 14、shift 15、IF 16、setlocal 与变量延迟 17、ATTRIB 显示或更改文件属性

    2009 达内Unix学习笔记

    ksh:$ sh:$ csh:guangzhou% bash:bash-3.00$ 一、注意事项 命令和参数之间必需用空格隔开,参数和参数之间也必需用空格隔开。 一行不能超过256个字符;大小写有区分。 二、特殊字符含义 文件名以“.”开头...

Global site tag (gtag.js) - Google Analytics