현재 실행 중인 스크립트의 내용을 출력하는 방법이 있나요?

현재 실행 중인 스크립트의 내용을 출력하는 방법이 있나요?

스크립트 내에서 명령을 사용하여 스크립트 자체의 리터럴 텍스트 내용을 인쇄하려고 합니다.

를 사용해 보았지만 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"

이는 더 간단하며 현재 디렉터리에 관계없이 작동합니다.

관련 정보