【问题标题】:How to get script directory (not current directory) in shell (sh) script (not bash)?如何在 shell(sh)脚本(不是 bash)中获取脚本目录(不是当前目录)?
【发布时间】:2022-06-16 16:37:52
【问题描述】:

文件夹结构:

#root
|- deployment
|  |- start-dev.sh
|  |- docker-compose.yml
|  |- // other files including app.Dockerfile and anything else I need
|- // everything else

初始start-dev.sh

#!/bin/sh

docker-compose -p my-container up -d
docker-compose -p my-container exec app bash

工作状态

在 VS Code(作为 WSL2 远程打开)集成终端中,我会输入

cd deployment
./start-dev.sh

部署成功。

如果相反,我只尝试了deployment/start-dev.sh 它失败了,因为当前目录中没有 docker-compose.yml。

愿望

我想要

deployment/start-dev.sh

上班。

start-dev.sh 的解决方案 1

#!/bin/bash

BASEDIR=$(dirname $0)

docker-compose -f "${BASEDIR}/docker-compose.yml" -p my-container up -d
docker-compose -f "${BASEDIR}/docker-compose.yml" -p my-container exec app bash

问题

如何将解决方案 1 转换为 sh 脚本而不是 bash

【问题讨论】:

    标签: bash docker shell docker-compose


    【解决方案1】:

    解决方案 2

    #!/bin/sh
    
    a="/$0"; a=${a%/*}; a=${a#/}; a=${a:-.}; BASEDIR=$(cd "$a"; pwd)
    
    docker-compose -f "${BASEDIR}/docker-compose.yml" -p my-container up -d
    docker-compose -f "${BASEDIR}/docker-compose.yml" -p my-container exec app bash
    

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 2012-04-11
      • 2015-07-02
      • 2014-03-25
      • 2011-01-07
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多