nemo:コンテキストメニュー操作がスクリプトを起動し、選択したシンボリックリンクを比較的作成します。

nemo:コンテキストメニュー操作がスクリプトを起動し、選択したシンボリックリンクを比較的作成します。

私の目標は、シンボリックリンクでシンボリックリンクを右クリックし、リンクnemoを相対パスに強制的に書き換えるカスタムスクリプトをトリガーすることです(絶対パスがある場合)。

問題は、絶対パスを持つシンボリックリンクを生成するためにDRAG+SHIFT+CTRLハードコードされていることです。nemoこれにより、ファイルシステムにリモートでアクセスしようとすると問題が発生します。

私の問題は、ジェスチャーを維持したい、ソースからビルドしたくDRAG+SHIFT+CTRLない、nemo関連していないリンクされたディレクトリをリモートで閲覧できるようにしたいということです。

私が思いついた解決策は、その中に新しい状況に合ったメニューオプションを作成することでした。nemoこれにより、スクリプトをトリガーしてこれらのリンクを「修正」することができます。

新しく作成し、コンテキストメニューオプションを正常に作成しました。以下を.nemo_action使用して新しいファイルを作成しました。GitHubのテンプレート

このタイプのファイルには2つのディレクトリがあります。

  • /usr/share/nemo/actions/システム全体にわたる作業
  • $HOME/.local/share/nemo/actions/ユーザー操作のため

私のfix-link.nemo_actionファイルは次のとおりです。

[Nemo Action]
Active=true
Name=Force Relative Link
Comment=If the file is a link to an absolute path, it will be forced to become relative.
Exec=<fix-link.sh %F>
Selection=any
Extensions=nodirs;
EscapeSpaces=true

私のfix-link.shファイル(同じディレクトリにあります)は次のとおりです。

#!/bin/bash
$(ln "-rs" $(readlink -f "$1") "$1.tmp")
mv -f "$1.tmp" $(readlink -f "$1")
exit 0

一時ファイルは正常に作成されましたが、上書きは拒否されます。これは、元の絶対パスリンクを作成したときに設定した権限に関連しているよう$(readlink -f "$1")です。nemoDRAG+SHIFT+CTRLl

編集する

@Gillesは私のスクリプトで多くのバグを修正しました。この時点で、私はファイルExtensions=nodirs;の行をfix-link.nemo_action読むように変更する必要があることがわかりましたExtensions=any;。それ以外の場合は、コンテキストメニューからこのスクリプトを有効またはリンクすることもできません。ディレクトリ、これはすべての目的で行われる作業です。

だから今

fix-link.nemo_action次のように:

[Nemo Action]
Active=true
Name=Force Relative Link
Comment=If the file is a link to an absolute path, it will be forced to become relative.
Exec=<fix-link.sh %F>
Selection=any
Extensions=any;
EscapeSpaces=true

私のfix-link.shファイルは次のとおりです。

#!/bin/bash
ln -rs -- "$(readlink -f -- "$1")" "$1.tmp"
mv -f -- "$1.tmp" "$1"

すべてが世界とよく合います。みんなありがとうございます。

答え1

スクリプトにはいくつかの問題があります。

  • 二重引用符がありません。について$(readlink …)。リンク先にスペースまたはワイルドカードが含まれていると中断されます。
  • コマンド置換を使用しln、結果を実行するコマンドとして使用しています。幸いなことlnに、出力は生成されないため、何の害もありません。
  • あなたのmvコマンドはシンボリックリンクをターゲットの場所に移動しますが、これは意味がありません。

私はこれがあなたが書きたいものだと思います:

#!/bin/sh
ln -rs -- "$(readlink -f -- "$1")" "$1.tmp"
mv -f -- "$1.tmp" "$1"

または、次のものを使用できます。symlinks多くのLinuxディストリビューションに存在するユーティリティ(元のMark Lordsによって管理され、現在はJ. Brandt Buckleyによって管理されています)。このコマンドは、symlinks -c /path/to/directory指定されたディレクトリ内のすべてのシンボリックリンクを相対リンクに変換します。

関連情報