Bash를 사용하여 절대 경로를 상대 경로로 확인

Bash를 사용하여 절대 경로를 상대 경로로 확인

다음과 같은 간단한 bash 스크립트가 있다고 가정해 보겠습니다.

#!/usr/bin/env bash

file="$1";

if [ -z "$file" ]; then
    echo "Must pass relative file path as the first argument.";
fi

git_root=`git rev-parse --show-toplevel`;

#  => need to resolve file from an absolute path to relative path, relative to git root

git diff HEAD:"$file" remotes/origin/dev:"$file"

이 스크립트에 절대 경로를 전달하는 경우 이를 처리할 수 있어야 합니다. 이를 수행하는 정식 방법은 무엇입니까? 절대 파일 경로인지 확인하려면 첫 번째 문자가 "/"인지 확인하면 되나요?

답변1

저는 MacOS를 사용하고 있으므로 coreutils를 설치해야 합니다.

brew install coreutils

그러면 다음과 같이 realpath를 사용할 수 있습니다.

file=`realpath --relative-to="$git_root" "$file"`

또는 아무것도 설치하지 않고 실행되는 것이 필요한 경우 다음 node.js 스크립트를 사용할 수 있습니다.

#!/usr/bin/env node
'use strict';

const path = require('path');

const file = process.argv[2];
const relativeTo = process.argv[3];

if (!relativeTo) {
  console.error('must pass an absolute path as the second argument.');
  process.exit(1);
}

if (!file) {
  console.error('must pass a file as the first argument.');
  process.exit(1);
}

console.log(path.relative(relativeTo, file));

관련 정보