【问题标题】:Newbie: Script to change directories新手:更改目录的脚本
【发布时间】:2017-11-27 06:24:21
【问题描述】:

以下是我正在尝试的更大脚本的 sn-p。我只是想让这部分识别参数是一个目录,然后 cd 到该目录:即 ./larj /etc.

#!/bin/ksh
# Filename: larj.sh

if [ $# -gt 1 ]; then
    echo "0 or 1 arguments allowed."
    exit
fi
if [ -f "$1" ]; then
    echo "directory only."
    exit
else
    if [ -d "$1" ]; then
        cd $1
    fi
fi

当我以 /etc 作为参数运行脚本时,似乎什么也没发生;它保持在同一个目录中,没有错误。 有人对如何让它更改目录有任何建议吗?

谢谢

【问题讨论】:

标签: linux scripting ksh


【解决方案1】:

cd不能工作的问题是当你以./larj /etc执行脚本时cdsub-shell中执行。所以当你执行脚本时,它会改变子shell的工作目录,对当前shell没有影响。

因此您可以将其作为. ./larj /etc 执行。

请参阅Why doesn't “cd” work in a bash shell script?

【讨论】:

  • 好的。这是有道理的 - subshel​​l。正如我所提到的,这只是较大脚本的一个 sn-p。所以,sn-p 没问题。当我将它添加到较大的脚本时,它应该 cd 到参数中的目录,执行其功能,并在我工作的 shell 中返回结果?准确吗?
  • @T2true。是的,它运作良好。您可以通过仅包含cd /tmp && mkdir -p test 的小型 bash 脚本进行测试,以检查test 目录是否存在。然后你会发现它运行良好。
【解决方案2】:

cd 发生在脚本的外壳中。

当脚本结束时,它的 shell 退出,并且您返回到运行脚本之前的目录。为了改变目录,你可以

mkdir testdir
. ./your_script.sh testdir

在脚本结束时,您将被移动到目录 testdir。

【讨论】:

    猜你喜欢
    • 2014-04-12
    • 2010-11-28
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    相关资源
    最近更新 更多