Linux Meld Nautilus上下文菜单的Shell脚本

Linux Meld Nautilus上下文菜单的Shell脚本,linux,shell,nautilus,meld,Linux,Shell,Nautilus,Meld,使用两个nautilus脚本(存储在/home/user/.gnome2/nautilus脚本中)提供“选择以进行比较”和“比较以选择” 脚本1:选择以进行比较 #!/bin/sh quoted=$(echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | awk 'BEGIN { FS = "\n" } { printf "\"%s\" ", $1 }' | sed -e s#\"\"##) echo "$quoted" > $HOME/.beyondc

使用两个nautilus脚本(存储在
/home/user/.gnome2/nautilus脚本中)提供“选择以进行比较”和“比较以选择”

脚本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
我正在尝试为做类似的脚本,但它不起作用

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

quoted=$(echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | awk 'BEGIN { FS = "\n" } { printf "\"%s\" ", $1 }' | sed -e s#\"\"##)
因此,我可以适应meld。

引号=$(…)将任何输出分配给名为quoted的变量,并可以稍后在脚本中用作$quoted或${quoted}或“${quoted}”或“$quoted”

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

所以你只需要一次把剧本拆开一块,看看它能做什么

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\u SCRIPT\u SELECTED\u FILE\u路径应该是什么,所以很难在这里向您展示。而且,在这里指定的任何代码中都没有定义该变量,因此当您
echo
其值时,可能只会得到一个空行。准备好研究如何设置该值以及正确的值是什么

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

我希望这会有所帮助。

引号=$(…)将任何输出分配给名为quoted的变量,以后可以在脚本中使用$quoted或${quoted}或“${quoted}”或“$quoted”

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

所以你只需要一次把剧本拆开一块,看看它能做什么

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\u SCRIPT\u SELECTED\u FILE\u路径应该是什么,所以很难在这里向您展示。而且,在这里指定的任何代码中都没有定义该变量,因此当您
echo
其值时,可能只会得到一个空行。准备好研究如何设置该值以及正确的值是什么

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


我希望这能有所帮助。

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


查看此处的一些屏幕截图-

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


在这里查看一些截图-

由于这篇文章,我刚刚发现了diff-ext,太棒了

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

$ diff-ext-setup
Mime类型
窗格中,选中
application/x-trash


现在你可以比较一个文件和它的备份了。

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

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

$ diff-ext-setup
Mime类型
窗格中,选中
application/x-trash


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

如果不一定要使用shel脚本,您可以使用这个:它是一个用Python编写的Nautilus插件。如果不一定要使用shel脚本,您可以使用这个:它是一个用Python编写的Nautilus插件。至少对于ubuntu bionic beaver(18.04),
diff-ext
不可用<代码>sudo apt get install meld nautilus compare
适合我。请注意,您需要关闭所有nautilus窗口(
nautilus-q
)并重新启动,然后才能看到文件上下文菜单。至少对于ubuntu bionic beaver(18.04),
diff ext
不可用<代码>sudo apt get install meld nautilus compare适合我。请注意,您需要关闭所有nautilus窗口(
nautilus-q
)并重新启动,然后才能看到文件上下文菜单。