【问题标题】:How to change directory in a Shell Script?如何在 Shell 脚本中更改目录?
【发布时间】:2013-02-08 15:35:01
【问题描述】:

这是我第一次创建 Shell 脚本。

目前我正在使用 nodejs,我正在尝试创建一个 Shell 脚本并在其中使用 git。

我的脚本是什么样子的

#!/bin/bash
git clone git://github.com/Tmeister/Nodejs---Boilerplate.git site

这个脚本位于我的桌面并且可以运行(是的,我已经安装了 git)。

我想要什么

在它下载了 git 仓库之后,我想:

cd /site
npm install

我已经安装了 Nodejs 和 NPM。

我尝试了什么

我只想深入创建的文件夹并运行命令npm install,所以我想这样做:

#!/bin/bash
git clone git://github.com/Tmeister/Nodejs---Boilerplate.git site
echo "cd /site"
echo "npm install"

我也读过alias 并尝试过

#!/bin/bash
git clone git://github.com/Tmeister/Nodejs---Boilerplate.git site
alias proj="cd /site"
proj
echo "npm install"

但没有任何效果..

谁能帮帮我?

【问题讨论】:

  • 你的意思可能是cd site 没有斜线。
  • echo 用于在屏幕上显示文本。

标签: git shell


【解决方案1】:

这可能比您想象的要简单(因为您一直在编写 bash(或您使用的任何 shell)“脚本”,只需使用命令行即​​可):

#!/bin/bash
git clone git://github.com/Tmeister/Nodejs---Boilerplate.git site
cd site
npm install

cd - # back to the previous directory

为了让它更健壮一点,只有在cd site 成功时才运行npm(更多关于Chaining commands together 的内容):

git clone git://github.com/Tmeister/Nodejs---Boilerplate.git site
cd site && npm install && cd -

因为我读了一些关于reliable bash的文章,这里还有另一个版本:

#!/bin/bash

OLDPWD=$(pwd)
git clone git://github.com/Tmeister/Nodejs---Boilerplate.git site \
    && cd site && npm install && cd "$OLDPWD"
function atexit() { cd "$OLDPWD"; }
trap atexit EXIT # go back to where we came from, however we exit

【讨论】:

  • exit 之前cd'ing 有什么意义?如果脚本没有,会有什么不同?