set -x在bash中使用将shell扩展命令打印到stderr.我想将它们重定向到文件或管道.但不是整个输出 - 只有一些命令.就像是:
set -x command.txt ### <-- command.txt param is made up
echo $A $B
set +x
Run Code Online (Sandbox Code Playgroud)
这会将调试输出发送到命令.文本.
可以这样做吗?
我有一个bash脚本,需要将近5秒钟才能运行.我想调试它,并确定哪些命令花费的时间最长.这样做的最佳方式是什么?我可以设置一个标志吗?设置#!/bin/bash -vx并没有真正帮助.我想要的基本上是按行号执行时间.
这个答案“如何分析 bash shell 脚本? ”似乎几乎完美地涵盖了我在这里尝试完成的工作。我目前有一些修改提示的 zsh 脚本,但是我认为 oh-my-zsh 的一些更新引发了一些我需要追查的问题。时不时的呆滞让人难以忍受。
为此,您将如何调整此示例答案中的提示部分以使用 zsh 与 bash?
目前我已经修改/etc/zshenv,使其具有示例中的初始建议代码:
PS4='+ $(date "+%s.%N")\011 '
exec 3>&2 2>/tmp/bashstart.$$.log
set -x
Run Code Online (Sandbox Code Playgroud)
我~/.zshrc的尾部附加了以下内容:
set +x
exec 2>&3 3>&-
Run Code Online (Sandbox Code Playgroud)
当然,这些对于 ZSH shell 定制是无效的。我的提示渲染代码使用 oh-my-zsh 自定义。我可以在我想的提示前添加适当的代码,或者我愿意接受其他建议。
我正在编写一个bash包装器来学习一些脚本概念.我们的想法是在bash中编写一个脚本,并在登录时将其设置为用户的shell.
我做了一个while循环reads和evals用户的输入,然后注意到,每当用户输入时CTRL + C,脚本都会中止,因此用户会话结束.
为了避免这种情况,我陷入SIGINT了陷阱,无所事事.
现在,问题在于当你输入CTRL + C一半命令时,它不会被取消,就像在bash上那样 - 它只是忽略了CTRL + C.
所以,如果我输入ping stockoverf^Cping stackoverflow.com,我得到的ping stockoverfping stackoverflow.com不是ping stackoverflow.com我想要的.
有没有办法做到这一点?
#!/bin/bash
# let's trap SIGINT (CTRL + C)
trap "" SIGINT
while true
do
read -e -p "$USER - SHIELD: `pwd`> " command
history -s $command
eval $command
done
Run Code Online (Sandbox Code Playgroud) 在Java程序中,我通常使用以下函数来分析时间信息:
...
long start = System.currentTimeMillis();
...
...
System.out.println("elapsed time 1: "+(System.currentTimeMills() - start));
...
...
start = System.currentTimeMillis();
...
System.out.println("elapsed time 2: "+(System.currentTimeMills() - start));
...
Run Code Online (Sandbox Code Playgroud)
如何在shell bash中做类似的事情?此外,如果有循环,如何收集累计时间?
例如
for ((i=0;i<$lines;i=i+$step))
do
head -$((i+step)) $1 | tail -$step > tmp1
head -$((i+step)) $2 | tail -$step > tmp2
setstr=$setstr' '`./accuracy.sh tmp1 tmp2`
done
echo $setstr | awk '{for (i=1;i<=NF;i++) sum+=$i; }END{print sum/NF}'
Run Code Online (Sandbox Code Playgroud)
我想分别分析累计的head/tail时间和accuracy.sh tmp1 tmp2时间.
我试图在 bash 中使用 while 循环来遍历 3 个文件的内容。它们包含名称、aws 账户和 aws 账号的列表。
但循环不正确,它不断重复列表中的第一个名称和列表中的第一个 aws 环境。
这是我看到的输出:
AWS user name: aadatiya does not exist in AWS account: company-lab
AWS user name: aadatiya does not exist in AWS account: company-lab
AWS user name: aadatiya does not exist in AWS account: company-lab
AWS user name: aadatiya does not exist in AWS account: company-lab
AWS user name: aadatiya does not exist in AWS account: company-lab
AWS user name: aadatiya does not exist in AWS account: company-lab …Run Code Online (Sandbox Code Playgroud)