เวลาประทับใน Exec = บรรทัดของไฟล์ .desktop เป็นไปได้หรือไม่


11

Lubuntu 16.04 - เซสชัน Openbox

ฉันสามารถใช้เทอร์มินัลเพื่อเปิดไฟล์ที่มีการประทับเวลาด้วยgedit:

gedit ~/$(date +%Y%m%d%H%M%S).txt

คำสั่งยังสามารถใช้ผ่านแป้นพิมพ์ลัดใน Openbox

<keybind key="W-4">        # gedit time-stamped file
  <action name="Execute"><command>sh -c 'gedit ~/$(date +%Y%m%d%H%M%S).txt'</command></action>
</keybind>

แต่ฉันไม่สามารถทำเช่นเดียวกันผ่านทางExec=สายของ.desktopไฟล์

Exec=sh -c 'gedit ~/$(date +%Y%m%d%H%M%S).txt'

เพียงสร้างไฟล์ที่เรียกว่า ~/.txt

ดังนั้นฉันจะรับไฟล์ .desktop ทำสิ่งที่ฉันต้องการได้อย่างไร


1
ฉันไม่คิดว่าไฟล์ .desktop สามารถเรียก$()คำสั่งsub-shell เช่นนั้นได้ ฉันคิดว่าคุณต้องการเรียกสคริปต์อื่นที่มีคำสั่ง sub-shell เพื่อเปิดไฟล์ของคุณ
Terrance

แน่นอนว่าฉันจะทำเช่นนั้น =)
Terrance

1
ไฟล์ HI @DKBose .desktop สามารถเรียกใช้เชลล์ย่อยได้เนื่องจากExec=/bin/bash -c "echo $(date) > ~/out.txt"ทำงานได้ดี +%Y%m%d%H%M%Sน่าจะเป็นปัญหา ยังเคี้ยวมันอยู่
Jacob Vlijm

ฉันถือว่าสิ่งแรกไม่ได้ผลเพราะ% ถูกใช้เป็นอาร์กิวเมนต์บรรทัดคำสั่งสำหรับผู้บริหารในไฟล์. เดสก์ท็อปมันอาจเป็นไปได้ที่จะหลบหนีพวกเขาอย่างใด แต่วิธีการแก้ปัญหาอื่น ๆ ดูเหมือนว่าไม่เป็นไร ฉันจะเพิ่มนี่เป็นความคิดเห็น แต่บัญชีของฉันที่นี่เป็นของใหม่
Mikael Kjær

1
สวัสดี @DKBose ดูคำตอบของฉัน :)
จาค็อบ Vlijm

คำตอบ:


10

น่าเสียดายที่ไฟล์ .desktop ไม่ได้เรียก$()คำสั่งsub-shell เสมอไปในแบบที่เราต้องการ วิธีหนึ่งในการทำสิ่งนี้ที่ฉันได้พบคือการสร้างสคริปต์อื่นที่มีคำสั่ง sub-shell เพื่อเปิดไฟล์เช่นนั้น

Execบรรทัดจะมีลักษณะ:

Exec=/path/to/script

จากนั้นไฟล์สคริปต์ของคุณจะมีคำสั่งเพื่อเปิดไฟล์ใหม่ของคุณ:

#!/bin/sh

gedit ~/$(date +%Y%m%d%H%M%S).txt

สคริปต์จะต้องสามารถเรียกใช้งานได้:

chmod +x /path/to/script

หวังว่านี่จะช่วยได้!


@JacobVlijm ปัญหาคล้ายกับสิ่งที่เราเห็นในcronกรณีที่อักขระบางตัว ( %?) จำเป็นต้องได้รับการ esacped หรือไม่
DK Bose

@DKBose อาจจะเป็นอย่างดีฉันยังคงเล่นซอกับมันและฉันคิดว่ามันควรจะทำงาน Subshells เพียงอย่างเดียวจะไม่มีปัญหา
Jacob Vlijm

@JacobVlijm คุณอาจถูกต้อง ฉันได้พบว่าฉันต้องการหลีกเลี่ยงคำสั่ง sub-shell ภายในไฟล์เช่นนี้เหมือนในsources.listไฟล์ apt คุณไม่สามารถแทนที่ชื่อรีลีสด้วย$(lsb_release -sc)เนื่องจากมันใช้งานไม่ได้ หากคุณคิดออกฉันจะรักที่จะเห็นว่าคุณทำมัน :)
Terrance

สวัสดี Terrance ใช้งานได้! ดูคำตอบของฉัน ...
344324 Jacob Vlijm

@JacobVlijm ลองใช้+\%Y\%m\%d\%H\%M\%Sแล้วมันควรจะทำงาน
Videonauth

8

ปัญหา

สคริปต์ไม่จำเป็น

ปัญหาไม่ใช่ว่า.desktopไฟล์ไม่สามารถเรียกใช้คำสั่งด้วย subshells ได้เนื่องจาก

Exec=/bin/bash -c "echo $(date) > ~/out.txt"

ทำงานได้อย่างสมบูรณ์แบบใน.desktopไฟล์

เล่นไปตามคำสั่งฉันได้ข้อสรุปว่า%-character เป็นสาเหตุของปัญหา ฉันยังไม่มีคำอธิบายสำหรับเรื่องนี้และจนถึงตอนนี้ฉันไม่สามารถหาข้อมูลเกี่ยวกับวิธีการแก้ปัญหาหรือหลบหนีได้

ฉันจึงไปหาคำสั่งเพื่อให้ได้เวลาโดยไม่ต้องใช้ตัวละครที่น่าสงสัย

หรือใช้ Ruby เป็นวันที่และเวลา

สิ่งนี้นำฉันไปสู่Rubyซึ่งสร้างวันที่ & เวลาปัจจุบันจากคำสั่ง:

$ ruby -e 'puts Time.now.inspect'
2016-05-29 16:12:36 +0200

เมื่อเราแก้ไขเอาต์พุตด้วยawkการลบช่องว่างและตัวคั่นเรามีสิ่งที่เราต้องการและคำสั่งที่ใช้งานได้ใน.desktopไฟล์เนื่องจากเราไม่ได้ใช้%:

Exec=/bin/bash -c  "gedit ~/$(ruby -e 'puts Time.now.inspect' | awk -F'[: -]' '{print $1$2$3$4$5$6}')"


ป้อนคำอธิบายรูปภาพที่นี่

บันทึก!

ไม่ต้องสงสัยเลยว่าคำสั่งสามารถ "หลงเสน่ห์" เล็กน้อยฉันอาจจะแก้ไขคำตอบวันนี้หรือวันพรุ่งนี้


ดี! นี่เป็นอีกวิธีในการทำอย่างแน่นอน ฉันไม่ได้ติดตั้ง Ruby แต่เมื่อติดตั้งแล้วมันใช้งานได้แน่นอน ฉันยอมรับว่าการเล่นซอกับสิ่งนี้คุณสามารถทำให้มันเป็นแบบที่คุณต้องการ :)
Terrance

@ ความอดทนกลายเป็นคำถามที่น่าสนใจ ไม่เคยวิ่งเข้าไปในปัญหาใน.desktopไฟล์เช่นนี้มาก่อน ...
จาค็อบ Vlijm

ฉันก็ไม่เหมือนกัน. เป็นเรื่องดีที่รู้และฉันพบว่าการตอบคำถามเช่นนี้หลายครั้งเราเรียนรู้ด้วยตัวเองเช่นกัน :)
Terrance

1
@Terrance 99% ของสิ่งที่ฉันรู้ว่าฉันได้เรียนรู้เกี่ยวกับการตอบคำถาม :)
จาค็อบ Vlijm

1
คุณเป็นแรงบันดาลใจให้ฉันเปลี่ยนถ้อยคำของฉันในคำตอบของฉันเช่นกัน ฉันเปลี่ยนของฉันให้เป็นทางเดียวแทนที่จะเป็นวิธีที่ดีที่สุด และการเปลี่ยนแปลงอื่น ๆ เช่นนั้นผู้คนไม่คิดว่ามันเป็นวิธีเดียว ขอบคุณ! :)
Terrance
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.