答案1
這種美學也讓我惱火。我沒有嘗試hostname
返回小寫的內容,而是簡單地攻擊了bash
提示的顯示方式。我編輯了.bashrc
(這是特定於 Windows 安裝的,因此不太可能在不同電腦上重複使用)對提示變數執行以下操作PS1
# Annoyingly the windows hostname is UPPERCASE which really doesn't look
# good on linux. So for this machine I'm going to grab the hostname and
# hardcode it into the prompt
HN=`hostname`
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@${HN,,}\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@${HN,,}:\w\$ '
fi
unset color_prompt force_color_prompt
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@${HN,,}: \w\a\]$PS1"
;;
*)
;;
esac
上面的程式碼本質上是在使用將字串 A 轉換為小寫的功能PS1
來建立機器時將機器的小寫名稱硬編碼到其中。雖然這不是問題的優雅解決方案,但這確實讓 shell 看起來像一個更正常的 Linux shell!bash 4.0
$(A,,)
答案2
編輯:目前該措施已經實施;您在系統屬性中設定的大小寫現在將被保留。
我也遇到了同樣的問題。事實證明,您不能只在 Windows 上的 Ubuntu (BUW) 上的 Bash 中更改 /etc/hostname,因為每次啟動時都會產生 /etc/hostname。 BUW 似乎使用電腦的 NetBIOS 名稱來產生 /etc/hostname,根據本文,「以大寫形式表示,其中從小寫到大寫的轉換演算法取決於 OEM 字元集」。當您在 Windows 中透過Settings > System > About
或重新命名電腦時Control Panel > System and Security > System
,它會保留您指定的大小寫,但 NetBIOS 名稱將轉換為全部大寫。也就是說,可以使用 Windows API 函數將 NetBIOS 名稱變更為小寫SetComputerName
。這是一個小 C 程式(非統一碼)將 NetBIOS 名稱設定為其第一個參數(需要管理員權限):
#define _WIN32_WINNT 0x0500
#include <sdkddkver.h>
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#include <stdio.h>
int main(int argc, char **argv) {
if (argc != 2) {
fprintf(stderr, "Usage: %s <New NetBIOS name>\n", argv[0]);
return 1;
}
if (SetComputerNameA(argv[1]) == 0) {
LPSTR error_message = NULL;
DWORD error_code = GetLastError();
FormatMessageA(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
error_code,
0,
(LPSTR)&error_message,
0,
NULL
);
fprintf(stderr, "SetComputerNameA error (%lu)", error_code);
if (error_message != NULL) {
fprintf(stderr, ": %s", error_message);
LocalFree(error_message);
}
fprintf(stderr, "\n");
return 2;
}
else {
printf("NetBIOS name set to \"%s\"\n", argv[1]);
return 0;
}
}
使用它需要您自擔風險,因為我不完全確定使用非大寫 NetBIOS 名稱是否會產生任何不利影響(它可能會破壞依賴 DnsHostnameToComputerName 的東西)。最終我不確定 BUW 是否有意/有必要使用 NetBIOS 名稱;我問過這件事在 BUW 的問題追蹤器上。
或者,如果您不想變更 NetBIOS 名稱,則可以設計某種方法在每次開始使用 BUW 時變更主機名稱sudo hostname prophet-w10
(然後exec bash
使其顯示在提示字元中)。