有没有办法查看/显示/打印 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种语言的长链。