防止 Unix 命令行呈现 bash 颜色?
Prevent Unix command line from taking on bash color?
我在 Mac 上的 iTerm 2.1.3 中 运行 有一个 Bash 脚本。如果出现错误,我喜欢使用颜色代码来更改脚本输出的颜色:
#!/usr/bin/env bash
database=mydb
RED='3[0;31m'
echo -e "[Dumping database '$database']"
pg_dump -Fc -v -f /tmp/${database}.bak ${database}
if [ "$?" -ne 0 ]; then
printf "\n${RED}Database dump failed${NC}\n"
exit 1
fi
问题是,如果我从 Unix 命令行 运行 这个脚本时出现错误,那么我的命令行会呈现错误输出的颜色(在本例中为红色),我必须关闭 iTerm window 恢复到我通常的颜色。有没有办法防止这种情况发生在我的脚本中?
谢谢。
糟糕!你忘了设置一个变量!您的脚本使用 ${NC}
来规范化颜色,但它的声明无处可见。
您可能还想使用格式引号而不是单引号使分配更漂亮。
#!/usr/bin/env bash
database=mydb
if [ -t 0 ]; then
RED=$'\e[0;31m'
NC=$'\e[0m'
else
RED=""
NC=""
fi
printf "[Dumping database '%s']\n" "$database"
pg_dump -Fc -v -f /tmp/${database}.bak ${database}
if [ "$?" -ne 0 ]; then
printf "\n${RED}Database dump failed${NC}\n"
exit 1
fi
请注意,我已经从 echo -e
切换到 printf
,后者更便于携带(以防您决定要 运行 这个不使用 bash,但仍然包括格式引号,如 FreeBSD 的 /bin/sh).
另请注意测试,[ -t 0 ]
如果它在终端上 运行,则 returns 为真。在这种情况下,相同的错误输出可用于交互式和记录的结果,而不会用控制字符污染您的日志。
我在 Mac 上的 iTerm 2.1.3 中 运行 有一个 Bash 脚本。如果出现错误,我喜欢使用颜色代码来更改脚本输出的颜色:
#!/usr/bin/env bash
database=mydb
RED='3[0;31m'
echo -e "[Dumping database '$database']"
pg_dump -Fc -v -f /tmp/${database}.bak ${database}
if [ "$?" -ne 0 ]; then
printf "\n${RED}Database dump failed${NC}\n"
exit 1
fi
问题是,如果我从 Unix 命令行 运行 这个脚本时出现错误,那么我的命令行会呈现错误输出的颜色(在本例中为红色),我必须关闭 iTerm window 恢复到我通常的颜色。有没有办法防止这种情况发生在我的脚本中?
谢谢。
糟糕!你忘了设置一个变量!您的脚本使用 ${NC}
来规范化颜色,但它的声明无处可见。
您可能还想使用格式引号而不是单引号使分配更漂亮。
#!/usr/bin/env bash
database=mydb
if [ -t 0 ]; then
RED=$'\e[0;31m'
NC=$'\e[0m'
else
RED=""
NC=""
fi
printf "[Dumping database '%s']\n" "$database"
pg_dump -Fc -v -f /tmp/${database}.bak ${database}
if [ "$?" -ne 0 ]; then
printf "\n${RED}Database dump failed${NC}\n"
exit 1
fi
请注意,我已经从 echo -e
切换到 printf
,后者更便于携带(以防您决定要 运行 这个不使用 bash,但仍然包括格式引号,如 FreeBSD 的 /bin/sh).
另请注意测试,[ -t 0 ]
如果它在终端上 运行,则 returns 为真。在这种情况下,相同的错误输出可用于交互式和记录的结果,而不会用控制字符污染您的日志。