打印 bash 脚本的源代码及其包含的内容

打印 bash 脚本的源代码及其包含的内容

有没有办法查看/显示/打印 bash 脚本的源代码及其包含内容(又名“源”)?

例如:

子.sh文件

 function showMe(){
     echo "INCLUDE"
    }

主.sh文件

#!/bin/bash    

source sub.sh

showMe    
echo "OK"

main.sh 的“打印”将显示:

#!/bin/bash    

showMe(){
 echo "INCLUDE"
}

showMe    
echo "OK"

答案1

您可以尝试以下操作awk

awk '/^source/ { while (getline l <$2 > 0) print l; close($2); next; } { print; }' main.sh

因此,以 开头的每一行source fname都应替换为文件的内容(如果存在)。

答案2

perl -p0e 'while(s/source\s+(\S+)/`cat $1`/e){}' foo.sh

答案3

如果您也不介意执行脚本,这里有一个显示源代码及其包含内容的简单方法:

bash -v foo.sh

答案4

输出自己源代码的程序称为奎因。有很多,尽管实际开发一个是令人惊讶的不直观。网上的大多数示例都不包含任何内容。可以找到一个简单的bash版本这里:

#!/bin/bash
q=(
'#!/bin/bash'
'q=('
')'
'printf "%s\n" "${q[@]:0:2}"'
'printf "\047%s\047\n" "${q[@]}"'
'printf "%s\n" "${q[@]:2}"'
)
printf "%s\n" "${q[@]:0:2}"
printf "\047%s\047\n" "${q[@]}"
printf "%s\n" "${q[@]:2}"

几乎所有编程语言中都有 quinine。还有 quine 链(以另一种语言输出源代码,该源输出原始代码)。这个奎因是一个128种语言的长链。

相关内容