Câu hỏi Ubuntu 14.04 subshell và mở rộng biến trong các phím tắt tùy chỉnh?


Làm cách nào để tôi có thể bật mở rộng bash bằng các phím tắt tùy chỉnh trong 14.04? Đây là một ví dụ mà tôi đã cố gắng để có được thiết lập; Tôi muốn thực hiện lệnh chính xác này (hoạt động từ một thiết bị đầu cuối chạy bash):

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

Nó không hoạt động như hiện tại, và cũng không:

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

Nếu tôi thay đổi nó thành:

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

Tôi kết thúc với một tập tin trên máy tính để bàn của tôi được gọi là "ảnh chụp màn hình _ $ (ngày +% x_% H:% M:% S:% N) .png" (không mở rộng subshell). Tôi đang làm gì sai? Điều gì thực hiện các lệnh này nếu không bash? Tại sao không phải là subshells hoặc biến / tildes mở rộng?


2
2017-08-08 03:21


gốc




Các câu trả lời:


Trường phím tắt trong Unity hoạt động theo cách tương tự .desktop các tệp, tức là các lệnh được thực thi mà không có bất kỳ dạng mở rộng con trỏ hoặc biến nào và không thể truy cập bất kỳ biến môi trường nào.

Tôi đã không thể tìm thấy một đặc điểm kỹ thuật chính thức liên quan đến menu phím tắt nhưng tôi nghĩ rằng nó tiết kiệm để giả định rằng lệnh thực hiện theo hướng dẫn tương tự với Trường Exec trong XDG .desktop các tập tin.

Điều này có nghĩa là, trong thực tế, có hai cách bạn có thể thực hiện công việc dòng lệnh tùy chỉnh của mình bằng menu lối tắt:

  1. Chuyển đổi các lệnh của bạn thành một kịch bản lệnh đơn giản và trỏ lối tắt bàn phím đến tập lệnh shell. 

    Ví dụ, bạn có thể dán phần sau vào một tệp văn bản mới, đặt tên nó là custom_screenshot_script và thực thi tập lệnh:

    #!/bin/bash
    gnome-screenshot --window --remove-border -f "~/Pictures/screenshot_$(date +%x_%H:%M:%S:%N).png"
    
  2. Gọi điện bash để thực hiện lệnh của bạn.

    Điều này là khó khăn hơn bởi vì bạn phải thoát khỏi đối số của bạn một cách chính xác. Một cái gì đó như sau nên làm việc:

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

4
2017-08-18 11:12





Trong trường hợp của tôi, tôi sẽ làm một kịch bản:

/ bin / sh

Trường hợp (window_border) trong         ~. / picture

    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''

kết thúc

và nó có thể hoạt động tốt theo cách này.


-2
2017-08-22 17:55