bash - 替代不依赖于网络连接的主机名
问题描述
我开发的代码旨在与多台计算机上的文件系统一起运行。数据目录在计算机之间同步,但每台计算机上数据目录的特定位置是唯一的。为了解决这个问题,我设置了一个路径文件,其中路径的开头取决于代码在哪台计算机上运行。我使用该hostname
函数确定代码在哪台计算机上运行。
这已经开始导致在我的本地机器上运行代码出现问题,因为输出取决于我连接到的特定网络,如果我在咖啡店使用 wifi,这可能是非常随机的。
是否有替代方法hostname
会返回一些标识我正在使用我的本地计算机并且不受我的特定网络连接影响的东西?
解决方案
有多种选择。您可以获得 Mac 的序列号或硬件 UUID(请参阅此问题):
SerialNumber=$(ioreg -c IOPlatformExpertDevice -d 2 | awk -F\" '/IOPlatformSerialNumber/{print $(NF-1)}')
HardwareUUID=$(ioreg -c IOPlatformExpertDevice -d 2 | awk -F\" '/IOPlatformUUID/{print $(NF-1)}')
还有第一个网络接口的硬件地址:
en0MAC=$(ifconfig en0 | awk '$1=="ether" {print $2}')
如果您更喜欢使用在“系统偏好设置”的“共享”面板中设置的计算机名称(或它的 mDNS 兼容版本):
ComputerName=$(scutil --get ComputerName)
LocalHostName=$(scutil --get LocalHostName)
警告:计算机名称可能包含空格和其他奇怪的字符,因此请务必双引号对该变量的任何引用以避免解析问题。
推荐阅读
- svn - Subversion:如何解决合并中的冲突 --reintegrate?
- javascript - 使用 Jquery/Javascript 根据下拉选项删除元素
- python - 为什么即使使用 del 和 gc 也不能在 python 中释放内存?
- c# - UWP 将 MenuFlyout(Item) 动态添加到现有的 menuflyout
- java - 有没有更好/更小的方法来比较矩阵的值
- wkhtmltopdf - 如何从 TOC 中排除某些条目
- machine-learning - 每个示例对具有多个类别的分类特征进行编码
- signal-processing - 为什么 Octave conv() 给出的结果与两个信号的手动卷积不同?
- sql - 使用 Pivot 将行转换为动态列
- microservices - 在微服务架构实施中是否有任何替代事件溯源的方法?请建议