Bash
如何使 Systemd 服務文件執行包含特殊字元的回顯命令?
在我執行之後,我正在嘗試編寫一個服務文件來取消綁定這樣的 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 建議的轉義,但您也可以嘗試轉義字元串。