Matlab实现的pushd和popd功能:跨平台目录切换与管理

需积分: 9 0 下载量 63 浏览量 更新于2024-11-02 收藏 3KB ZIP 举报
PUSHD用于将当前工作目录切换到指定的新目录,并将原目录保存到堆栈中,而POPD则用于返回到之前存储的目录。这两种函数特别适用于需要临时进入子目录进行操作,而后又需要返回到原来目录的场景。它们使得目录切换更加方便、快捷,而且操作具有可逆性。" pushd函数在MATLAB中主要实现以下功能: 1. 推入当前工作目录:调用pushd时,MATLAB会将当前工作目录保存到一个内部堆栈中,随后将新的目录路径设置为当前工作目录。 2. 改变工作目录:pushd的参数可以是一个目录路径,也可以是一个文件路径。如果是目录路径,MATLAB会直接切换到该目录;如果是文件路径,MATLAB会尝试定位包含该文件的目录,并切换到该目录。 3. 目录堆栈管理:pushd的每次调用都会在内部的目录堆栈中添加一个新的目录条目,这样用户可以在需要时使用popd函数返回到之前的目录。 popd函数在MATLAB中的主要功能是: 1. 返回到存储的目录:通过执行popd,用户可以返回到之前通过pushd操作推入的目录,这在多层目录操作中非常有用。 2. 弹出目录堆栈:每次调用popd,都会从目录堆栈中弹出最顶端的目录路径,并将其设置为当前工作目录。这允许用户在复杂的目录结构中灵活切换,而不必记住每一个操作过的路径。 这些函数在UNIX/Linux和DOS系统中以命令行形式存在,它们是通过命令行执行目录切换和管理的命令。在MATLAB环境中,这两个函数被封装成了可以像其他函数一样调用的形式,便于在编写脚本或函数时使用。 在使用pushd和popd时,用户需要确保指定的目录存在且可访问。如果不正确,MATLAB会报错。需要注意的是,由于MATLAB的文件和目录处理函数在UNIX/Linux和Windows操作系统间可能有差异,因此在跨平台使用时需要特别注意路径的格式。 结合给定的文件名称列表,pushd.zip很可能包含的是MATLAB中实现pushd和popd功能的源代码或相关文档。由于文件名称中明确提到了UNIX/Linux和DOS,我们可以推测这些文件可能包含了两个系统环境下的兼容性处理代码,以及可能的用户文档说明。 在开发MATLAB脚本或应用程序时,利用pushd和popd函数能够提高工作效率,尤其是在处理涉及大量目录操作的复杂项目时。它们提供了一种有效的方式来“记住”目录的路径,并能够方便地恢复到之前的工作状态,这对于管理大型代码库或进行数据处理分析尤其重要。 此外,这些函数对于教育和科研工作中编写可重复实验的脚本也很有帮助。研究人员和学生能够通过它们更方便地组织和管理实验数据路径,从而使得实验结果更易于理解和复现。 最后,对于希望了解或开发跨平台MATLAB工具箱的开发者而言,熟悉pushd和popd函数能够帮助他们设计出更符合用户习惯、操作简便的软件工具。这些函数的存在,不仅提升了MATLAB在操作系统层面的灵活性,也体现了MATLAB作为高级数值计算平台在集成通用操作系统功能方面的优势。

#!/bin/bash #bash -x ./build_package.sh -a aarch64 -w `pud` -i 123abc -v 1,4.0 -r 3 -b /root/packaging_releases/build_root_a3860623d/virtual_rootfs/usr/local/ -l /usr/local -t deb OS=Kylin VERSION= WORK_ROOT= PACKAGE_TYPE=deb BUILD_ID= RELEASE= DISTRO_ID=`cat /etc/*-release | grep ^ID= | awk -F'=' '{print $2}' | sed '/\"//g'` DISTRO _VERSION_ID=`cat /etc/*-release | grep ^VERSION_ID= | awk -F'=' '{print $2}' | sed "s/\"//g'` usage() { echo "Usage:" echo "build_package.sh " } build_rpm_package() { mkdir -p $BUILD ROOT pushd $BUILD ROOT RPMBUILD=$BUILD_ROOT/rpmbuild_$BUILD_ID rpmbuild --bb --target=$ARCH \ -D "_topdir $RPMBUILD" \ -D "_arch $ARCH" \ -D "current_version $VERSION" \ -D "current_release $RELEASE.$DISTRO_ID$DISTRO_VERSION_ID" \ -D "lib $BIN PATH" \ -D "lib_prefix $_LIB_PREFTX" \ $WORK_ROOT/rpm_package/package.spec cp `find ./ -name *.rpm` $WORK_ROOT; popd exit } build_deb_package() { mkdir -p $BUILD_ROOT pushd $BUILD_ROOT PACKAGE_NAME="sietium-umod-drv_"$VERSION"-"$RELEASE"."$DISTRO_ID$DISTRO_VERSION_ID"_"$ARCH DEBBUILD=$BUILD_ROOT/debbuild_$BUILD_ID mkdir -p $DEBBUILD/$_LIB_PREFIX sed-i "s/Version:/Version:$VERSION-$RELEASE/g" $WORK_ROOT/deb_package/DEBIAN/control sed -i "s/Architecture:/Architecture:$ARCH/g"$WORK_ROOT/deb_package/DEBIAN/control rsync -rat $WORK_ROOT/deb_package/DEBIAN $DEBBUILD rsync -rat $BIN_PATH $DEBBUILD/$_LIB_PREFIX pushd $DEBBUILD mv ./DEBIAN ./debian mv usr/local/sietium/lib64/pkgconfig . dpkg-shlibdeps usr/local/sietium/lib64/* mv ./pkgconfig usr/local/sietium/lib64/ DEPS=`cat debian/substvars | awk -F'shlibs:Depends=' '{print $2}'` sed -i "s/Depends:/Depends:$DEPS/g" debian/control mv ./debian ./DEBIAN popd dpkg-deb--build $DEBBUILD $WORK_ROOT/$PACKAGE_NAME.deb Popd exit } while getopts a:b:d:o:v:w:t:i:h:r:l:c:h: option do case $option in a) ARCH=$OPTARG;; b) BIN_PATH=$OPTARG;; f) CONF_PATH=$OPTARG;; o) OS=$OPTARG;; v) VERSION=$OPTARG;; w)WORK_ROOT=$OPTARG;; t) PACKAGE_TYPE=$OPTARG;; i) BUILD_ID=$OPTARG;; r) RELEASE=$OPTARG;; l) _LIB_PREFIX=$OPTARG;; c)_CONF_PREFIX=$OPTARG;; h) usage;; ?) usage;; esac done echo "build env:" echo " Arch:" $ARCH echo " OS:" $OS echo " Version:" $VERSION echo " RELEASE:" $RELEASE echo " Work dir:" SWORK_ROOT echo " Package type:" $PACKAGE_TYPE BUILD_ROOT=$WORK_ROOT/build _package_$BUILD_ID if [ $PACKAGE_TYPE =='rpm']; then build_rpm_package elif[$PACKAGE_TYPE =='deb']; then build_deb_package else build_rpm_package build_deb_package fi解释脚本意义

132 浏览量

configuration written to .config # make[2]: Leaving directory '/home/lkuser/SDK/Hi3519DV500_SDK_V2.0.0.2/mini_sdk/boot/u-boot/u-boot-2022.07' pushd /home/lkuser/SDK/Hi3519DV500_SDK_V2.0.0.2/mini_sdk/boot/u-boot/u-boot-2022.07;make LLVM= CROSS_COMPILE=aarch64-v01c01-linux-gnu- 1>/dev/null;popd ~/SDK/Hi3519DV500_SDK_V2.0.0.2/mini_sdk/boot/u-boot/u-boot-2022.07 ~/SDK/Hi3519DV500_SDK_V2.0.0.2/mini_sdk/boot/u-boot ===================== WARNING ====================== This board does not use CONFIG_DM_ETH (Driver Model for Ethernet drivers). Please update the board to use CONFIG_DM_ETH before the v2020.07 release. Failure to update by the deadline may result in board removal. See doc/develop/driver-model/migration.rst for more info. ==================================================== ===================== WARNING ====================== This board does not use CONFIG_TIMER (Driver Model for Timer drivers). Please update the board to use CONFIG_TIMER before the v2023.01 release. Failure to update by the deadline may result in board removal. See doc/develop/driver-model/migration.rst for more info. ==================================================== ===================== WARNING ====================== This board does not use CONFIG_DM_SERIAL (Driver Model for Serial drivers). Please update the board to use CONFIG_DM_SERIAL before the v2023.04 release. Failure to update by the deadline may result in board removal. See doc/develop/driver-model/migration.rst for more info. ==================================================== ~/SDK/Hi3519DV500_SDK_V2.0.0.2/mini_sdk/boot/u-boot echo "gzip" gzip make -C /home/lkuser/SDK/Hi3519DV500_SDK_V2.0.0.2/mini_sdk/boot/u-boot/../gzip/ make[2]: Entering directory '/home/lkuser/SDK/Hi3519DV500_SDK_V2.0.0.2/mini_sdk/boot/u-boot' make[2]: *** /home/lkuser/SDK/Hi3519DV500_SDK_V2.0.0.2/mini_sdk/boot/u-boot/../gzip/: No such file or directory. Stop. make[2]: Leaving directory '/home/lkuser/SDK/Hi3519DV500_SDK_V2.0.0.2/mini_sdk/boot/u-boot' make[1]: *** [Makefile:51: all] Error 2 make[1]: Leaving directory '/home/lkuser/SDK/Hi3519DV500_SDK_V2.0.0.2/mini_sdk/boot/u-boot' make: *** [Makefile:287: boot] Error 2什么意思

236 浏览量