Systemdサービスファイルで特殊文字を含むechoコマンドを実行させる方法は?

Systemdサービスファイルで特殊文字を含むechoコマンドを実行させる方法は?

以下を実行した後、次のように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

show echoコマンドを実行すると、systemctl status servicefile-nameエラーなしで実行されます(code=exited, status=0/SUCCESS)。明らかに、サービスファイルで正しいechoコマンド構文を使用していません。また、エスケープ文字を削除しようとしましたが、まだ機能しません。

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

特殊文字「:」を使用して実行時にシステムサービスファイルからデバイスを削除/バインド解除する方法を知っている人はいますか?

ベストアンサー1

ExecStop=...実行されませんbash。したがって、>orのような演算子は&bashがどのように解釈されるかとは異なる方法で解釈されます。 systemd単に実行し、引数として/bin/echo渡します。1>"sys-bus-pci-devices-0000:03:00.0-remove"

>リダイレクトとして機能するには、このステートメントをインタプリタに渡すbash必要があります。bashbash -c

この試み:

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

私はGAD3Rが提案したエスケープについてはよくわかりませんが、文字列をエスケープしてみることもできます。

おすすめ記事