سؤال Ubuntu 14.04 subshell والتوسع المتغير في اختصارات لوحة المفاتيح المخصصة؟


كيف يمكنني تمكين bash expansion بواسطة اختصارات لوحة المفاتيح المخصصة في 14.04؟ وإليك مثالًا كنت أحاول الحصول عليه ؛ أرغب في تنفيذ هذا الأمر بالضبط (الذي يعمل من محطة باش قيد التشغيل):

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"

أنا في نهاية المطاف مع ملف على سطح المكتب الخاص بي يسمى "لقطة للشاشة _ $ (date +٪ x_٪ H:٪ M:٪ S:٪ N) .png" (لا يوجد توسع في subshell). ما الخطأ الذي افعله؟ ما ينفذ هذه الأوامر إن لم يكن باش؟ لماذا لا يتم توسيع القصاصات الفرعية أو المتغيرات / تيلز؟


2
2017-08-08 03:21


الأصل




الأجوبة:


يعمل حقل اختصارات لوحة المفاتيح في Unity بطريقة مماثلة لـ .desktop الملفات ، أي يتم تنفيذ الأوامر دون أي شكل من أشكال subshell أو توسيع متغير ولا يمكن الوصول إلى أي متغيرات البيئة.

لم أتمكن من العثور على مواصفات رسمية بشأن قائمة اختصارات لوحة المفاتيح ولكني أعتقد أنه من الحكمة افتراض أن تنفيذ الأمر يتبع إرشادات مشابهة مجال Exec في XDG .desktop الملفات.

ما يعنيه هذا ، من الناحية العملية ، أن هناك طريقتان يمكنك من خلالهما استخدام سطر الأوامر المخصص مع قائمة الاختصارات:

  1. قم بتحويل الأوامر إلى نص برمجي شجاعي بسيط وقم بتوجيه اختصار لوحة المفاتيح إلى البرنامج النصي الخاص بـ 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\""
    

4
2017-08-18 11:12





في حالتي ، سأقدم نصًا:

/ بن / ش

حالة (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''

ENDL

وقد تعمل هذه الطريقة الجميلة.


-2
2017-08-22 17:55