Linux

我認為 Linux 是 POSIX 兼容的,但是沒有找到一些 POSIX 命令

  • September 16, 2021

我想為 Linux 和其他 UNIX 系統(可能是 OSX)編寫一個小的 shell 腳本。而且,為什麼不讓事情不依賴於平台,對吧?

所以我使用了一個#!/bin/shshebang,我的腳本的一部分應該壓縮一個字元串,所以我想我只是看看哪個是壓縮字元串或流的POSIX預設實用程序。不出所料,https:tar //pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html上都沒有gzip列出。但我沒想到的是:列出的並沒有安裝在我的 Debian 11 Bullseye 系統上!compress

所以我什至不能依賴所有所謂的 POSIX 兼容系統上可用的 POSIX 命令?我在某個地方犯了錯誤嗎?

我已經做了很多跨平台工具,您確實需要關注兩件事:

  1. 核心邏輯/語言應該是 posix 兼容的,可以正常工作,避免 bashisms、zsh’isms 等。這是 POSIX 合規性很重要的地方,而且很容易實現。這在 subshel​​l 程式碼中變得尤為重要。
  2. 使用該核心 POSIX sh 邏輯作為包裝器來測試、檢測然後使用執行操作所需的工具。從最有可能在那裡,到最少。我認為我從來沒有花任何時間或精力在理論上“它應該在那裡,因為 POSIX 這麼說”編碼,我總是只是測試和使用那裡的東西。當然,它添加了一些程式碼行,但如果您的目標是始終處理所有事情,那麼您就是這樣做的。

重新使用“壓縮”工具,老實說,我什至在此執行緒之前從未聽說過它,難怪從上面的評論中,我為什麼要擁有它,當它不如總是安裝的現代工具時,或者可以輕鬆安裝嗎?

如果你遇到任何復雜的事情,你的邏輯隨時隨地工作的機率會迅速下降,除非你可以在基礎級別讓它變得非常簡單。直接 sh,是的,這將始終有效,但是一旦添加了工具,就不會那麼多了。例如,您甚至不能指望系統上的“awk”是基本的 awk,它可能是已連結到 awk 的 nawk 或 gawk。

如果不測試工具,您會感到難過,並且您將無法成功創建真正跨平台/跨作業系統/跨發行版的東西。

話雖如此,您仍然會發現無法正常工作的系統,然後您必須通過添加更多測試和備份來更新工具以使這種情況正常工作,就是這樣。我剛剛為我以前從未見過的新情況添加了一些。

這並不難,除非您嘗試維護一個標準,例如 GNU/Linux 在許多級別上幾乎不再遵循(systemd?不?,好的,那麼,讓我們繼續)應該做您希望相信它應該做的事情如果沒有,那隻會導致您浪費時間和毫無意義的挫敗感。

請注意,如果您嘗試使用非平凡的工具,這將變得更加困難,因為此時您根本不能指望任何作業系統,您必須測試和處理每個變體,例如每個 BSD 都為他們沒有感到自豪使用包分發,但作業系統包含自己的核心工具,這意味著,即使工具在每個變體/作業系統中具有相同的名稱,您也永遠不能依賴跨平台的輸出或操作相同。例如,ps 在 OpenBSD、FreeBSD、Linux 甚至在busybox 上都有很大的不同,例如你可能會在 wrt 韌體上找到。

引用自:https://unix.stackexchange.com/questions/669208