如何在 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
文件中。
实际上,这意味着有两种方法可以使自定义命令行与快捷菜单一起工作:
将您的命令转换为简单的 shell 脚本,并将键盘快捷键指向该 shell 脚本。
例如,您可以将以下内容粘贴到新的文本文件中,将其命名为
custom_screenshot_script
:#!/bin/bash gnome-screenshot --window --remove-border -f "~/Pictures/screenshot_$(date +%x_%H:%M:%S:%N).png"
调用
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''
结束
这样也许效果会很好。