다음과 같은 간단한 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));