【问题标题】:Pass filename from Nautilus to shell script将文件名从 Nautilus 传递到 shell 脚本
【发布时间】:2017-01-07 12:27:17
【问题描述】:

我正在尝试执行一个为参数获取文件名的 shell 脚本。

如果我去终端并输入完整的路径,我可以做到。

但我正在努力使这对用户更加友好,所以我想做的是从文件管理器或 nautilus 发送参数(完整路径)。

有可能吗?

【问题讨论】:

  • 是的,有可能。
  • @kaylum 我认为有一个隐含的“如何?”。
  • @kaylum ...我该怎么做?比如转到文件管理器并启动一个脚本,而不是获取文件路径的参数。

标签: linux debian nautilus


【解决方案1】:

这是可能的。这是一种方法:

将您的脚本复制到文件夹~/.local/share/nautilus/scripts/ -- 请注意,此路径将扩展以包含当前用户信息,例如:/home/john/.local/share/nautilus/scripts/

现在,在您的脚本中,使用$1 捕获参数。例如,假设您的脚本旨在删除文件,那么您的脚本可能是这样的:

#!/bin/bash
rm -f "$1"
exit

现在,重新启动 Nautilus 并导航到要对其执行操作的文件。右键单击该文件,然后在出现的菜单上选择“脚本”,然后在出现的 sumenu 上选择您的脚本名称——这将使用文件名作为参数执行您的脚本。

注意:别忘了先让你的脚本可执行,例如:chmod +x /home/john/.local/share/nautilus/scripts/myScript

【讨论】:

  • 嘿,谢谢你,这是一个了不起的答案,一切都如此清晰。我现在要试试。我还找到了另一种方法。它并没有完全执行来自 nautilus 的脚本,但它对我有用。我正在分享,因为有人可能会觉得这很有用。执行脚本时,请使用 zenity 文件选择工具。在我的示例中 ./script.sh $(zenity --file-selection) 这将允许您浏览文件以及何时选择文件。路径作为参数传递给您的脚本。再次感谢大家的帮助,祝大家好运。
  • 不客气。当一个答案帮助您解决堆栈溢出时,请考虑支持该答案,以便向其他人表明这是一个很好的答案。另一件事:如果您的脚本需要 root 权限才能工作,您仍然可以通过在调用时使用 gksudo 来实现。
【解决方案2】:

好的,我将分享一个我发现可行的方法。

我所做的只是将路径作为参数传递,而不是在命令行上键入它。使其用户友好。

所以我使用了一个zenity工具,文件选择,浏览文件管理器并选择文件。

./script.sh $(zenity --file-selection)

看,现在我正在传递我选择的文件的路径。

如果你想试试这个,只需在命令行中输入。

zenity --file-selection

【讨论】: