如何根据正在运行的命令行程序更改前景色?(Bash 和 PowerShell)

如何根据正在运行的命令行程序更改前景色?(Bash 和 PowerShell)

我想根据正在运行的程序更改前景色。这在 Bash 或 PowerShell 中可以实现吗?

答案1

在 Powershell 中,您可以使用具有 -ForeGround 参数的 Write-Host cmdlet 来控制文本的前台。但请注意,通过此 cmdlet 写入控制台的文本不会不是转到管道,如果您希望稍后在管道中处理文本,这可能会导致一些意外行为。

以下是一个例子:

(get-help write-host).Description.Text | write-host -ForegroundColor Cyan

答案2

在 bash 中你可以定义一组函数:

功能命令名称
{
    陷阱':'2
    命令设置所需颜色
    命令的完整路径“$@”
    恢复默认颜色的命令
}

为每个要使用不同颜色的命令/程序指定颜色。例如,

function date
{
    trap ':' 2
    echo "\033[31m\c"
    /bin/date "$@"
    echo "\033[30m\c"
}

trap如果您中断程序(通过键入Ctrl+ ),该命令会使函数继续运行C。如果没有它,如果您在彩色程序运行时键入Ctrl+ C,您的终端将保留该命令的颜色。(可能有更好的方法来处理这个问题。)

"$@"被您输入到函数的参数替换,所以如果您说date -u,它就知道将-u选项传递给/bin/date命令。

您可能想要定义一个只执行恢复默认颜色操作的函数。由于该函数不需要参数,因此可以将其作为 来完成alias

相关内容