gpt4 book ai didi

bash - 在 bash 中回显打印 -e

转载 作者:行者123 更新时间:2023-11-29 09:21:12 24 4
gpt4 key购买 nike

我已经得到了我在 Bash 中创建的这个脚本,我正在使用的功能之一是 echo 并且我正在使用 -e 标志用于解释 \ 反斜杠转义。我有一个以彩色打印文本的脚本,但是当它回显将以彩色显示的消息时,它还会打印带有消息的 -e 标志

例子在这里;

NC='\033[31;0m\'       # no colors or formatting
RED='\033[0;31;1m\' # print text in bold red
PUR='\033[0;35;1m\' # print text in bold purple
YEL='\033[0;33;1m\' # print text in bold Yellow
GRA='\033[0;37;1m\' # print text in bold Gray

echo -e "This ${YEL}Message${NC} has color\nwith ${RED}new${NC} lines.

输出:

-e This Message has color.
with new lines

如果我也碰巧在 bash 脚本中运行另一个命令,我也会得到这个,即使它不应该。例如,在脚本中开始运行时使用 screen 运行。

\033[31;0m\033[0;31;1mscreen: not found

编辑**

详细说明我正在尝试做的事情;

#!/bin/sh

##
## Nexus Miner script
##


NC='\033[31;0m'
RED='\033[0;31;1m'
PUR='\033[0;35;1m'
YEL='\033[0;33;1m'
GRA='\033[0;37;1m'

ADDR="<wallet-address-goes-here"
NAME="<worker-name-goes-here>"
URL="nexusminingpool.com"

## check if user is root, if true, then exit with status 1, else run program.
if [ `whoami` = root ]; then
echo -e "\n${PUR}You don't need ROOT for this!${NC}\n" 1>&2
exit 1;

## running Nexus Miner with Screen so you can run it in background
## and call it up at any time to check mining progress of Nexus CPU Miner.
else
echo -e "\n\n${YEL}Normal User?${NC} ${GRA}[OK]${NC}\n${GRA}Session running with${NC} ${RED}SCREEN${NC}${GRA}, Press${NC} ${RED}^C + A${NC} ${GRA}then${NC} ${RED}^C + D${NC} ${GRA}to run in background.${NC}\n${GRA}to resume enter `${NC}${RED}screen -r${NC}${GRA}` from Terminal.${NC}\n\n"
echo -e "${PUR}Nexus CPU Miner${NC}\n${GRA}Wallet Address:${NC} $ADDR\n${GRA}Worker Name:${NC} $NAME\n${GRA}CPU Threads:${NC} (Default: 2)\n\n"

## call strings for wallet address and worker name varibles followe by thread numbers (default: 2)
## run nexus cpu miner within screen so it can run in the background
`screen /home/user/PrimePoolMiner/nexus_cpuminer $URL 9549 $ADDR $NAME 2`
fi

最佳答案

您写道,“我已经得到了我在 Bash 中创建的这个脚本”,但是您没有告诉我们您的确切意思。

UPDATE :问题已更新。脚本的第一行是 #!/bin/sh。继续阅读以获取解释和解决方案。

我可以通过将您的代码包含在以

开头的脚本中来在我的系统上重现该问题
#!/bin/sh

我可以通过将第一行更改为来纠正问题

#!/bin/bash

/bin/sh 在我的系统上恰好是 dash 的符号链接(symbolic link)。 dash shell 将 echo 作为内置命令,但它不支持 -e 选项。 #! 行,转到

echo 命令有多种实现方式:大多数 shell 将其作为内置命令提供(根据 shell 具有各种功能),并且可能有一个外部命令 /bin/echo 有自己微妙的不同行为。

如果您想要打印除简单文本行以外的任何内容的一致行为,我建议使用 printf 命令。参见 https://unix.stackexchange.com/questions/65803/why-is-printf-better-than-echo (由 Josh Lee 在评论中引用)。

#! 行,称为 shebang , 控制用于执行脚本的 shell。您执行脚本的交互式 shell 无关紧要。 (它几乎必须是那样的;否则脚本对不同用户的行为会有所不同)。在没有 #! 行的情况下,脚本将(可能)使用 /bin/sh 执行,但不显式没有多大意义。

关于bash - 在 bash 中回显打印 -e,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43661482/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com