Shell

使用 Fish shell 時 MAKEFLAGS 的正確格式是什麼?

  • March 13, 2022

為了縮短編譯時間,Arch wiki指出,

擁有多核/多處理器系統的使用者可以指定同時執行的作業數量。這可以通過使用nproc來確定可用處理器的數量,例如 MAKEFLAGS="-j$(nproc)"

如果我通過 在 Fish shell 中設置它set -Ux MAKEFLAGS "-J$(nproc)",那麼我會收到錯誤消息:

fish: $(...) is not supported. In fish, please use '(nproc)'.
set -Ux MAKEFLAGS "-J$(nproc)"
                    ^

我可以通過兩種方式設置此變數而不會收到錯誤:

  1. set -Ux MAKEFLAGS "-J(nproc)"
  2. set -Ux MAKEFLAGS '-J$(nproc)'

以下哪一個是正確的方法?或者他們倆都好嗎?

謝謝

兩者都不。在fish中,不能引用命令替換。

set arg "-J(nproc)"
set -S arg
$arg: set in global scope, unexported, with 1 elements
$arg[1]: |-J(nproc)|

利用

set -Ux MAKEFLAGS "-J"(nproc)

從 fish 3.4.0 開始,可以使用"$()"語法引用命令替換,因此原始命令現在可以使用。

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