Bash

如何使 Systemd 服務文件執行包含特殊字元的回顯命令?

  • February 2, 2022

在我執行之後,我正在嘗試編寫一個服務文件來取消綁定這樣的 PCI 設備systemctl stop servicefile-name

   ExecStop=/bin/echo 1 > "/sys/bus/pci/devices/0000\:03\:00.0/remove"

但是,解除綁定永遠不會發生,並且設備仍然處於活動狀態並正在執行。從 bash 命令行執行 echo 命令沒有問題,並且可以很好地刪除設備:echo 1 > /sys/bus/pci/devices/0000:03:00.0/remove

執行systemctl status servicefile-name顯示 echo 命令執行沒有任何錯誤:(code=exited, status=0/SUCCESS). 我顯然沒有在服務文件中使用正確的 echo 命令語法。我也嘗試刪除轉義字元,但它仍然不起作用

ExecStop=/bin/echo 1 > "/sys/bus/pci/devices/0000:03:00.0/remove"

有誰知道如何在執行時從 systemd 服務文件中刪除/取消綁定設備,給出特殊字元“:”?

ExecStop=...不執行bash。因此,喜歡>&不以 bash 解釋它們的方式解釋運算符。 systemd將簡單地執行/bin/echo並傳遞1, >, 和"sys-bus-pci-devices-0000:03:00.0-remove"作為參數。

如果要>充當bash重定向,則需要使用 . 將此語句傳遞給bash解釋器bash -c

嘗試這個:

ExecStop=/bin/bash -c "/bin/echo 1 > /sys/bus/pci/devices/0000\:03\:00.0/remove"

我不熟悉 GAD3R 建議的轉義,但您也可以嘗試轉義字元串。

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