Fedora

為什麼 rpm 命令有一個“–pipe”選項?

  • October 23, 2018

從 rpm 的手冊頁:

  --pipe CMD
         Pipes the output of rpm to the command CMD.

為什麼要添加這個?為什麼要使用它而不是通過外殼本身進行管道傳輸?

rpm當從 shell 呼叫時,該選項將無用。

但是當從其他程序呼叫時,如果這些參數是從某種形式的使用者輸入構造的,它將簡化傳遞非靜態參數rpm的過程(前提是呼叫程序是用一種不會強制呼叫 shell 來執行其他程序的語言編寫的) :

  • 當不使用 shell 時,呼叫程序需要自己設置管道並分別呼叫和rpm等待CMD
  • 當使用類似sh -c ´rpm Argument1 Argument2 ...´ | CMD的 shell 時,如果這些參數可能包含空格或 shell 元字元,則需要在參數周圍加一層引號,以防止它們被拆分為單詞或被 shell 解釋:

如果某個參數rpm是使用者對呼叫程序的輸入,它可能是Tom and Alice´s dog,程序員在Tom\ and\ Alice\´s\ dog為 shell 建構參數列表時必須將其轉換為。(並且任何參數CMD都必須以相同的方式引用。)

這更慢,容易出錯並且可能會引起安全問題。

  • 使用該--pipe選項時,呼叫程序不需要這些。(但是必須像以前一樣引用

to 的任何參數,因為 CMD 是由呼叫 from 的 shell 解釋的,因為它是來自單個參數的單個單詞 to 。)CMD``rpm``CMD``rpm

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