我知道如何将stdout重定向到文件:
exec > foo.log
echo test
Run Code Online (Sandbox Code Playgroud)
这会将'test'放入foo.log文件中.
现在我想将输出重定向到日志文件并将其保存在stdout上
即它可以从脚本外部轻松完成:
script | tee foo.log
Run Code Online (Sandbox Code Playgroud)
但我想在脚本本身内声明它
我试过了
exec | tee foo.log
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
我的bash shell需要3-4秒才能启动,而如果我启动它--norc会立即运行.
我开始"分析" /etc/bash.bashrc并~/.bashrc通过手动插入return语句和寻求速度改进,但它不是一个定量过程而且效率不高.
如何配置我的bash脚本并查看哪些命令需要花费大部分时间来启动?
为了调试我的脚本,我想在每个输出的开头添加内部变量$ FUNCNAME和$ LINENO,所以我知道输出发生在哪个函数和行号上.
foo(){
local bar="something"
echo "$FUNCNAME $LINENO: I just set bar to $bar"
}
Run Code Online (Sandbox Code Playgroud)
但是由于会有很多调试输出,如果我可以执行以下操作,它会更清晰:
foo(){
local trace='$FUNCNAME $LINENO'
local bar="something"
echo "$trace: I just set bar to $bar"
}
Run Code Online (Sandbox Code Playgroud)
但上面的字面输出:"$ FUNCNAME $ LINENO:我只是设置了一些东西"我认为这样做是因为双引号只扩展了一次内部的变量.
是否有一种语法上干净的方法在同一行中扩展变量两次?
linux bash parameter-passing variable-expansion parameter-expansion