【发布时间】:2017-01-14 16:41:46
【问题描述】:
我正在编辑一个脚本,由于脚本有点长,我决定将脚本的主要部分用大括号括起来,并将输出转移到一个日志文件,而不是为命令单独重定向日志。然后我注意到检查脚本的运行副本的命令块会给出 2 个不同的结果,具体取决于它是否包含在大括号中。
我将脚本运行为:
$ /bin/bash scriptname.bash
我的问题是为什么同一个命令块会返回 2 个不同的结果,以及是否可以让命令块在大括号内工作。
下面是命令方块:
#!/bin/bash
#set -x # Uncomment to debug this shell script
#
##########################################################
# DEFINE FILES AND VARIABLES HERE
##########################################################
THIS_SCRIPT=$(basename $0)
TIMESTAMP=$(date +%Y-%m-%d_%H%M%S)
LOGFILE=process_check_$TIMESTAMP.log
##########################################################
# BEGINNING OF MAIN
##########################################################
{
printf "%s\n" "Checking for currently runnning versions of this script"
MYPID=$$ # Capture this scripts PID
MYOTHERPROCESSES=$(ps -ef | \grep $THIS_SCRIPT | \grep -v $MYPID | \grep -v grep | awk '{print $2}')
if [[ "$MYOTHERPROCESSES" != "" ]]
then
printf "%s\n" "ERROR: Another version of this script is running...exiting!"
exit 2
else
printf "%s\n" "No other versions running...proceeding"
fi
printf "%s\n" "Doing some script stuff..."
exit 0
} | tee -a $LOGFILE 2>&1
# End of script
【问题讨论】:
-
你的输出有什么不同?您能否显示结果或差异。
-
旁注:如果你想同时记录标准输出和错误,stderr的重定向必须在管道之前发生(或者使用@ 987654323@ 用于管道)。
-
@Klaus - 在大括号中,该块显示有另一个脚本正在运行。在大括号之外时,该块正确评估没有其他副本正在运行。
-
@BenjaminW。 - 感谢那。在我的完整脚本中,我将错误代码分配给各个块,然后捕获这些代码并根据错误执行不同的操作。因为我认为它不相关,所以我没有在此处包含它。
标签: linux bash shell curly-braces