/bin/sh

/bin/sh

如何在 14.04 中通过自定义键盘快捷键启用 bash 扩展?下面是我一直尝试设置的示例;我想执行此精确命令(可从运行 bash 的终端运行):

gnome-screenshot --window --remove-border -f ~/Pictures/screenshot_$(date +%x_%H:%M:%S:%N).png

它不能按原样工作,并且也不能:

gnome-screenshot --window --remove-border -f $HOME/Pictures/screenshot_$(date +%x_%H:%M:%S:%N).png

如果我将其更改为以下内容:

gnome-screenshot --window --remove-border -f "/home/user/Pictures/screenshot_$(date +%x_%H:%M:%S:%N).png"

我最终在桌面上得到了一个名为“screenshot_$(date +%x_%H:%M:%S:%N).png”的文件(没有子 shell 扩展)。我做错了什么?如果不是 bash,谁会执行这些命令?为什么子 shell 或变量/波浪线没有扩展?

答案1

Unity 中的键盘快捷键字段的工作方式与.desktop文件类似,即命令的执行不需要任何形式的子 shell 或变量扩展,也不能访问任何环境变量。

我找不到关于键盘快捷键菜单的官方规范,但我认为可以安全地假设命令执行遵循与Exec 字段在 XDG.desktop文件中。

实际上,这意味着有两种方法可以使自定义命令行与快捷菜单一起工作:

  1. 将您的命令转换为简单的 shell 脚本,并将键盘快捷键指向该 shell 脚本。

    例如,您可以将以下内容粘贴到新的文本文件中,将其命名为custom_screenshot_script

    #!/bin/bash
    gnome-screenshot --window --remove-border -f "~/Pictures/screenshot_$(date +%x_%H:%M:%S:%N).png"
    
  2. 调用bash来执行您的命令。

    这比较棘手,因为你必须正确地转义你的参数。类似下面的代码应该可以工作:

    bash -c "gnome-screenshot --window --remove-border -f \"~/Pictures/screenshot_$(date +%x_%H:%M:%S:%N).png\""
    

答案2

就我而言,我会编写一个脚本:

/bin/sh

~./picture 中的案例(window_border)

    gnome-screenshot --window ~/picture/screenshot_$(date+%X_% H:$M:$:$S:$n)*png

    Bash -i remove-border -f window

    Bash --window --remove-border -f ''~/picture/screenshot_$(date+%X_%H:$M:$:$S:$N).png''

结束

这样也许效果会很好。

相关内容