システム単位のファイルを作成しようとしています。
実行可能ファイルのパスを指定する方法は?何を使うかをどう決めますか?
この特別なケースではmkdir
。
ExecStartPre = "/bin/mkdir -p %h/.config/example/pending/";
ただし、これによりユニットファイルの起動時にエラーが発生します。
Jan 16 08:46:11 nixos systemd[19577]: example.service: Failed at step EXEC spawning /bin/mkdir: No such file or directory
私はこれを使ってwhich
mkdirへのパスを見つけることができると思いました。しかし、${pkgs.nameOfPackage}
他の人のnix構成で1つを見ました。したがって、代わりにこれを使用する必要がありますか?
which mkdir
/run/current-system/sw/bin/mkdir
答え1
一般的に言えば、${pkgs.nameOfPackage}
が好ましい構文です。
特定の例では、mkdir
これはcoreutilsパッケージの一部です。コマンドを使用して、どんなもの(恥ずかしい意図)を決定することができますreadlink $(which mkdir)
。したがって、あなたの行は次のようになります。
ExecStartPre=${pkgs.coreutils}/bin/mkdir BLAH BLAH BLAH
coreutilsは常にAFIKとしてインストールされますが、この構文の1つの利点${pkgs.nameOfPackage}
はパッケージをインストールする必要がないことですnameOfPackage
。
答え2
まず、スペースと二重引用符は必要ありません。
ExecStartPre=/run/current-system/sw/bin/mkdir -p %h/.config/example/pending
第二に、システムでコマンドを試してみましたか?シェルから:
mkdir -p ~/.config/example/pending
最後に、%hはユーザーの家を表します。ただし、mkdir コマンドが正しい場所にないため、システムは別の場所をターゲットにすることもできます。echo ~
ホームディレクトリを表示します。