스크립트 내에서 명령을 사용하여 스크립트 자체의 리터럴 텍스트 내용을 인쇄하려고 합니다.
를 사용해 보았지만 cat $(pwd)/$(basename "$0")
작동하지 않습니다. 무엇을 해야할지 아는 사람 있나요?
답변1
이 명령을 분석해 보겠습니다.
cat $(pwd)/$(basename "$0")
$(pwd)
현재 있는 디렉터리로 확장됩니다.$(basename "$0")
실행 중인 스크립트의 파일 이름으로 확장됩니다.- (또한 공백 등이 있는 경로에서는 실패하므로 실제로 인용해야 합니다.)
따라서 동일한 디렉터리에서 스크립트를 실행하면 이것이 작동합니다.
$ cd /tmp
$ cat test.sh
#!/bin/bash
cat $(pwd)/$(basename "$0")
$ ./test.sh
#!/bin/bash
cat $(pwd)/$(basename "$0")
그러나 현재 디렉토리가아니요스크립트가 있는 디렉토리에 있으면 명령이 실패합니다.
$ cd /home
$ /tmp/test.sh
cat: /home/test.sh: No such file or directory
pwd
명령이 찾고 있는 것을 볼 수 있습니다 .현재의스크립트가 있는 디렉토리가 아닌 디렉토리입니다.
해결하려면 $0
대체를 사용하십시오.
cat "$0"
이는 더 간단하며 현재 디렉터리에 관계없이 작동합니다.