0

Beyond Compare通过使用两个 nautilus 脚本(存储在 中)提供“Select for compare”和“Compare to Selected” /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#\"\"##)

这样我就可以适应融合。

4

3 回答 3

3

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

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

于 2011-07-07T19:29:14.197 回答
1

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.

我希望这有帮助。

于 2011-05-11T15:27:19.887 回答
0

多亏了这篇文章,我才发现了 diff-ext,太好了!

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

$ diff-ext-setup

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

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

于 2012-10-29T11:29:39.457 回答