내가 작업중인 bash를 확인했습니다.
$ which bash
/usr/local/bin/bash
$ ls -l $(which bash)
lrwxr-xr-x 1 me 30 Oct 27 10:40 /usr/local/bin/bash -> ../Cellar/bash/4.4.23/bin/bash
그런 다음 bash의 상위 디렉토리를 확인합니다.usr/local/bin/
$ ls -l ../$(which bash)
ls: cannot access '..//usr/local/bin/bash': No such file or directory
$ ls -l ..$(which bash)
ls: cannot access '../usr/local/bin/bash': No such file or directory
불행하게도 나는 또 다른 실수를 저질렀습니다.
명령 대체 $를 사용하여 bash에서 상위 폴더로 이동하는 방법은 무엇입니까?
답변1
당신이하고있는 일은 종료하지 않고 실행하려고하는 것입니다 ls
...//usr/local/bin/bash
$ echo ../$(which bash)
..//usr/local/bin/bash
또한 을 사용하면 ls -l ..$(which bash)
상대 주소를 지정하므로 현재 작업 디렉터리의 위치에 따라 결과가 달라집니다.
따라서 이것은 오류를 발생시키지 않아야 합니다(상위 디렉토리가 아닌 파일을 찾습니다).
$ cd /usr
$ ls -ld ../$(which bash)
dirname
다음 명령을 사용해야 합니다 .
$ dirname $(which bash)
/bin
또는:
$ ls -ld $(dirname $(which bash))
drwxr-xr-x 2 root root 4096 Oct 17 16:46 /bin
파일이 링크된 경우(예: 귀하의 경우 bash, 제 경우 sh):
$ ls -ld $(dirname $(readlink -f $(which sh)))
drwxr-xr-x 2 root root 4096 Oct 17 16:46 /bin
답변2
기술적으로, 를 사용해도 실제로 실행 중인 버전이 which bash
항상 반환되는 것은 아닙니다 bash
. 다른 버전을 실행하고 있지만 다른 버전이 포함된 경로를 사용할 수도 있습니다. Linux에서는 ( 프로세스 ID 또는 실행 중인 셸)을 proc
사용하여 파일 시스템에서 실행 중인 셸의 실행 파일을 얻을 수 있으므로 원하는 것은 다음과 같습니다./proc/$$/exe
$$
$(dirname $(readlink /proc/$$/exe))