有没有办法输出当前运行脚本的内容?

有没有办法输出当前运行脚本的内容?

我正在尝试在脚本中使用一个命令来打印脚本本身的文字文本内容。

我尝试使用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"

这更简单,并且无论当前目录是什么都可以工作。

相关内容