nixでシステム単位ファイルの実行可能ファイルパスを指定するには?

nixでシステム単位ファイルの実行可能ファイルパスを指定するには?

システム単位のファイルを作成しようとしています。

実行可能ファイルのパスを指定する方法は?何を使うかをどう決めますか?

この特別なケースでは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

私はこれを使ってwhichmkdirへのパスを見つけることができると思いました。しかし、${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 ~ホームディレクトリを表示します。

関連情報