먼저 몇 가지 배경 지식을 바탕으로 .tgz 파일을 자동으로 풀기 위해 기본값으로 쉽게 매핑할 수 있는 실행 가능한 셸 스크립트를 작성하려고 합니다.
지금까지는 간단하다
tar -xzvf $1
드래그/드롭으로는 작동하지만 두 번 클릭하면 작동하지 않습니다. 파일이 같은 위치에 있으면 사용할 수 있으므로 스크립트의 현재 작업 디렉터리 때문이라고 가정합니다.
그러나 마찬가지로 $1은 전체 파일 경로를 tar 명령에 전달하면 안 되므로 괜찮을까요?
어쨌든, 나는 대답이 pwd 명령 다음에 dirname 명령이 오는 것이라고 생각했습니다.
cd 'dirname $1'
하지만 이것은 Google 제안이 작동하지 않습니다.
cd -P -- "$(dirname -- "$1")" && pwd -P
하지만 여전히 이 스크립트를 작동시킬 수 없습니다. 이는 올바른 오류가 아닐 수도 있습니다.
답변1
아니요, $1
이는 전체 파일 경로로 확장되지 않습니다. 실제로는 파일이 존재하지 않는 경우에도 정확한 첫 번째 인수입니다.
간단한 예를 보면 echo $1
실제로 이 사실이 드러납니다.
-C
어색한 디렉토리 변경 대신 해당 플래그를 사용하십시오 .
man tar
-C, --directory=디렉토리
작업을 수행하기 전에 DIR로 변경하십시오. 이 옵션은 순서를 구분합니다. 즉, 모든 후속 옵션에 영향을 미칩니다.
즉, 스크립트는 다음과 같습니다.
#!/bin/bash
tar -C "$(dirname "$(readlink -f "$1")")" -xzvf "$1"