어디서나 상대 파일 경로를 여는 응용 프로그램 실행

어디서나 상대 파일 경로를 여는 응용 프로그램 실행

시작 시 실행 파일을 기준으로 파일을 여는 응용 프로그램이 있습니다. 이 파일 경로는 프로그램 바이너리로 정적으로 컴파일되므로 수정할 수 없습니다. 파일을 찾을 수 있는지 확인하기 위해 해당 폴더에 먼저 "cd"하지 않고도 시스템의 어느 곳에서나 실행할 수 있는 별칭을 만들고 싶습니다.

그게 가능할까요?

답변1

프로그램에서 cd디렉토리로 이동해야 하고 프로그램을 변경할 수 없는 경우 cd해당 디렉토리에 -ing하지 않으면 해당 프로그램을 실행할 수 없습니다. 그것은 그렇게 간단합니다.

cd그러나 디렉토리에 대한 -s 라는 두 번째 쉘을 시작하고 프로그램을 실행할 수 있습니다. 프로그램이 끝나면 두 번째 셸이 종료되고 기본 셸이 종료되지 않았기 때문에 cd여전히 같은 위치에 있습니다.

간단한 예를 들면 다음과 같습니다.

$ alias ptmpdir="bash <<< 'cd /tmp ; pwd'"
$ ptmpdir
/tmp

Kamil Maciorowski가 주석에서 지적한 것처럼 이것은 쉘의 STDIN에 명령을 넣습니다. pwd예제에서처럼 프로그램이 STDIN을 사용하지 않고 오류를 확인하지 않는 경우에는 정상적으로 작동합니다 .

alias lstmpdir="bash -c 'cd /tmp && ls' ls"

오류를 확인하고 실패할 경우 올바른 종료 코드를 제공합니다 cd.

$ alias ptmpdir="bash -c 'cd /hop && ls' ls"
$ if ptmpdir ; then
> echo yes
> else
> echo no
> fi
ls: line 0: cd: /hop: No such file or directory
no

명령에 인수도 전달하려는 경우 별칭이 지저분해지고 이해하기가 더욱 어려워집니다. 그 경우에는. 기능이 더 좋을 것입니다.

$ hop(){ bash   -c 'cd /tmp && exec ls "$@"' ls "$@" ; }
$ hop
7iCipjf8J7         eh._2700550        in.clean.1285563                          tmp-ntt.xpi
MozillaMailnews    <rest deleted>

$ hop -lrt
total 56496
drwxrwxr-x 3 ljm      ljm          4096 Nov  5 17:28 gimp
drwxrwxr-x 2 ljm      ljm          4096 Nov  5 18:14 jna-107183
-rw------- 1 ljm      ljm             0 Nov  6 00:17 config-err-Ol5gyl
drwx------ 2 ljm      ljm          4096 Nov  6 00:17 ssh-FqqWxHh4jhu8
<rest deleted>

관련 정보