如何将一系列 bash 命令定义为字符串?
How to define a series of bash commands as a string?
现在我的 .zshrc 文件中的一些代码如下所示:
inetFunction(){
echo ${LRED}IP Address:${NC}
ifconfig en0 | grep "inet " | awk '{print }'
}
$LRED 定义为将颜色更改为浅红色,$NC 将其设置回正常。我用代码 alias inet='inetFunction'
实现了 inetFunction。命令的输出是
IP Address:
xx.x.xx.xxx
其中 "IP Address:" 为红色。我想将 IP 地址设为绿色,但出于某种原因,当我尝试其中任何一个时,它都不起作用:
${GREEN}ifconfig en0 | grep "inet " | awk '{print }'
ifconfig en0 | grep "inet " | ${GREEN}awk '{print }'
${GREEN}ifconfig en0 | grep "inet " | awk '{${GREEN} print }'
我什至尝试将整个事情设置为一个变量,例如:
variable='ifconfig en0 | grep "inet " | awk '{print }''
然后尝试echo ${GREEN} $variable
,但还是不行。
有什么想法吗?
$GREEN
需要回显。这是一组 ANSI 颜色代码,您的终端将其识别为更改文本颜色的信号。
echo -n "$GREEN"
ifconfig en0 | grep "inet " | awk '{print }'
echo -n "$NC"
或者,浓缩:
echo "$GREEN$(ifconfig en0 | grep "inet " | awk '{print }')$NC"
此外,正如@Jens 指出的那样,您可以像这样组合 grep 和 awk 命令:
echo "$GREEN$(ifconfig en0 | awk '/inet / {print }')$NC"
如中所述${GREEN}
需要打印才能生效。
因为你是 运行 awk
无论如何,你可以让它完成工作:
ifconfig en0 | awk '/inet / {print "'${GREEN}'" "'${NC}'"}'
ifconfig eno1 | awk "/inet / {print \"${GREEN}\" $2 \"${NC}\"}"
这样可以更好地控制要着色的内容,尤其是对于更复杂的 awk
程序。
显然,为此所需的引述一点也不漂亮。 </code>需要从shell中引用,这样才能被<code>awk
识别。 ${GREEN}
和 ${NC}
不能从 shell 中引用,以便它们可以被 shell 替换。但是因为它们现在只是 awk
的字符串,所以它们需要放在 awk
的双引号内;这些双引号也需要从 shell.
中引用
为了简单起见,您可以在命令行上使用 -v variable=value
参数为 awk
传递设置变量:
ifconfig en0 | awk -v green="$GREEN" -v nc="$NC" '/inet / {print green nc}'
现在我的 .zshrc 文件中的一些代码如下所示:
inetFunction(){
echo ${LRED}IP Address:${NC}
ifconfig en0 | grep "inet " | awk '{print }'
}
$LRED 定义为将颜色更改为浅红色,$NC 将其设置回正常。我用代码 alias inet='inetFunction'
实现了 inetFunction。命令的输出是
IP Address:
xx.x.xx.xxx
其中 "IP Address:" 为红色。我想将 IP 地址设为绿色,但出于某种原因,当我尝试其中任何一个时,它都不起作用:
${GREEN}ifconfig en0 | grep "inet " | awk '{print }'
ifconfig en0 | grep "inet " | ${GREEN}awk '{print }'
${GREEN}ifconfig en0 | grep "inet " | awk '{${GREEN} print }'
我什至尝试将整个事情设置为一个变量,例如:
variable='ifconfig en0 | grep "inet " | awk '{print }''
然后尝试echo ${GREEN} $variable
,但还是不行。
有什么想法吗?
$GREEN
需要回显。这是一组 ANSI 颜色代码,您的终端将其识别为更改文本颜色的信号。
echo -n "$GREEN"
ifconfig en0 | grep "inet " | awk '{print }'
echo -n "$NC"
或者,浓缩:
echo "$GREEN$(ifconfig en0 | grep "inet " | awk '{print }')$NC"
此外,正如@Jens 指出的那样,您可以像这样组合 grep 和 awk 命令:
echo "$GREEN$(ifconfig en0 | awk '/inet / {print }')$NC"
如${GREEN}
需要打印才能生效。
因为你是 运行 awk
无论如何,你可以让它完成工作:
ifconfig en0 | awk '/inet / {print "'${GREEN}'" "'${NC}'"}'
ifconfig eno1 | awk "/inet / {print \"${GREEN}\" $2 \"${NC}\"}"
这样可以更好地控制要着色的内容,尤其是对于更复杂的 awk
程序。
显然,为此所需的引述一点也不漂亮。 </code>需要从shell中引用,这样才能被<code>awk
识别。 ${GREEN}
和 ${NC}
不能从 shell 中引用,以便它们可以被 shell 替换。但是因为它们现在只是 awk
的字符串,所以它们需要放在 awk
的双引号内;这些双引号也需要从 shell.
为了简单起见,您可以在命令行上使用 -v variable=value
参数为 awk
传递设置变量:
ifconfig en0 | awk -v green="$GREEN" -v nc="$NC" '/inet / {print green nc}'