Разберем эту команду:
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"
Это проще и будет работать независимо от текущего каталога.