我正在尝试在脚本中使用一个命令来打印脚本本身的文字文本内容。
我尝试使用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"
这更简单,并且无论当前目录是什么都可以工作。