【问题标题】:Shell scripts for Meld Nautilus context menuMeld Nautilus 上下文菜单的 Shell 脚本
【发布时间】:2011-05-11 03:17:03
【问题描述】:

Beyond Compare 使用两个 nautilus 脚本(存储在/home/user/.gnome2/nautilus-scripts)提供“选择比较”和“比较选择”。

脚本 1:选择进行比较

#!/bin/sh
quoted=$(echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | awk 'BEGIN { FS = "\n" } { printf "\"%s\" ", $1 }' | sed -e s#\"\"##)
echo "$quoted" > $HOME/.beyondcompare/nautilus

脚本 2:与选定的比较

#!/bin/sh
arg2=$(cat $HOME/.beyondcompare/nautilus)
arg1=$(echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | awk 'BEGIN { FS = "\n" } { printf "\"%s\" ", $1 }' | sed -e s#\"\"##)
bcompare $arg1 $arg2

我正在尝试为Meld 执行类似的脚本,但它不起作用。

我不熟悉 shell 脚本。谁能帮我理解这一点:

quoted=$(echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | awk 'BEGIN { FS = "\n" } { printf "\"%s\" ", $1 }' | sed -e s#\"\"##)

这样我才能适应融合。

【问题讨论】:

标签: linux shell nautilus meld


【解决方案1】:

如果您不是为了学习而推出自己的解决方案,我建议您将 diff-ext 扩展安装到 nautilus。它是跨平台的,如果您运行的是 Debian/Ubuntu,安装它应该像 sudo apt-get install diff-ext 一样简单。

在此处查看一些屏幕截图 - http://diff-ext.sourceforge.net/screenshots.shtml

【讨论】:

  • 至少对于 ubuntu 仿生海狸 (18.04),diff-ext 不可用。 sudo apt-get install meld nautilus-compare 适合我。请注意,您需要关闭所有 nautilus 窗口 (nautilus -q) 并重新启动才能看到文件上下文菜单。
【解决方案2】:

quoted=$( ...) 将任何输出分配给名为quoted 的变量,并且可以稍后在脚本中用作 $quoted OR ${quoted} OR "${quoted}" OR "$quoted "

'|' char 在 unix/linux 中被称为“管道”,它将前面命令的输出连接到下面的命令中。

因此,您只需将脚本一次拆开 1 块,看看它的作用,

quoted=$(
# I would execute below by itself first
echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
# then add on this piped program to see how data gets transformed
| awk 'BEGIN { FS = "\n" } { printf "\"%s\" ", $1 }' 
# then add this
| sed -e s#\"\"##
# the capturing of the output to the var 'quoted' is the final step of code
)

# you **cannot** copy paste this whole block of code and expect it to work ;-)

我不知道 $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS 中应该包含什么内容,因此很难在这里向您展示。并且,该变量未在您在此处指定的任何代码中定义,因此当您 echo 其值时,您可能只会得到一个空行。准备对如何设置该值以及正确的值进行一些研究。

我还注意到您的代码“前缀”为#!/bin/sh。如果它确实是 /bin/sh,那么像 quoted=$(....) 这样的命令替换将不起作用,并且应该生成一条错误消息。大概您的系统实际上是在为 /bin/sh 使用 bash。您可以通过将“shebang”更改为#! /bin/bash 来消除将来可能出现的任何混淆(更改为 /bin/sh = bourne shell 的系统时)。

我希望这会有所帮助。

【讨论】:

    【解决方案3】:

    感谢这篇文章,我刚刚发现了 diff-ext,太棒了!

    我的第一次尝试失败了:默认情况下 diff-ext 不处理备份文件(*~ 和 *.bak)。要启用此功能,请运行:

    $ diff-ext-setup
    

    Mime types 窗格中,检查application/x-trash

    现在您可以比较文件及其备份。

    【讨论】: