Dấu thời gian trong Exec = dòng tệp .desktop có thể?


11

Lubfox 16.04 - Phiên Openbox

Tôi có thể sử dụng thiết bị đầu cuối để mở tệp có dấu thời gian bằng gedit:

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

Lệnh cũng có thể được sử dụng thông qua phím tắt trong 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>

Nhưng tôi không thể làm như vậy thông qua Exec=dòng của một .desktoptập tin.

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

chỉ cần tạo một tập tin gọi là ~/.txt

Vậy làm thế nào để tôi có được một tập tin .desktop để làm những gì tôi muốn?


1
Tôi không nghĩ tệp .desktop có thể gọi các $()lệnh shell phụ như thế. Tôi nghĩ bạn cần nó để gọi một tập lệnh khác có chứa lệnh shell phụ để mở tệp của bạn.
Terrance

Chắc chắn tôi sẽ làm điều đó. =)
Terrance

1
Các tệp HI @DKBose .desktop có thể chạy các trình bao phụ, vì nó Exec=/bin/bash -c "echo $(date) > ~/out.txt"chạy tốt. các +%Y%m%d%H%M%Scó vẻ là vấn đề. vẫn đang nhai nó
Jacob Vlijm

Tôi giả sử điều đầu tiên không hoạt động vì% đã được sử dụng làm đối số dòng lệnh cho tệp exec trong tệp .desktop Có thể thoát chúng bằng cách nào đó, nhưng giải pháp khác có vẻ ổn. Tôi đã có thể thêm điều này như một bình luận, nhưng tài khoản của tôi ở đây là mới.
Mikael Kjær

1
Xin chào @DKBose xem câu trả lời của tôi :)
Jacob Vlijm

Câu trả lời:


10

Thật không may, các tệp .desktop không phải lúc nào cũng gọi các $()lệnh của lớp con theo cách chúng ta muốn. Một cách để làm điều này mà tôi đã tìm thấy là tạo một tập lệnh khác có chứa lệnh shell phụ để mở tệp như thế.

Các Execdòng sẽ như thế nào:

Exec=/path/to/script

sau đó tệp tập lệnh của bạn sẽ chứa lệnh để mở tệp mới của bạn:

#!/bin/sh

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

kịch bản cũng sẽ phải được thực thi:

chmod +x /path/to/script

Hi vọng điêu nay co ich!


@JacobVlijm Có phải vấn đề tương tự như những gì người ta nhìn thấy trong cronđó các ký tự nhất định ( %?) Cần phải được khắc phục?
DK Bose

@DKBose Có thể rất tốt, tôi vẫn đang loay hoay với nó, và tôi nghĩ nó nên hoạt động. Subshells một mình là không có vấn đề.
Jacob Vlijm

@JacobVlijm Có lẽ bạn đúng. Tôi đã thấy rằng tôi muốn tránh các lệnh shell phụ trong các tệp như thế này, giống như trong sources.listtệp apt bạn không thể thay thế tên phát hành bằng $(lsb_release -sc)vì nó cũng không hoạt động. Nếu bạn tìm ra nó, tôi rất thích xem bạn đã làm như thế nào. :)
Terrance

Xin chào Terrance, nó hoạt động! Xem câu trả lời của tôi ...
Jacob Vlijm

@JacobVlijm thử sử dụng +\%Y\%m\%d\%H\%M\%Sthì nó sẽ hoạt động.
Videonauth

8

Vấn đề

Một kịch bản là không cần thiết.

Vấn đề không phải là một .desktoptập tin có thể chạy các lệnh với subshells, vì

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

hoạt động hoàn toàn tốt trong một .desktoptập tin.

Loay hoay với mệnh lệnh, tôi đi đến kết luận rằng %-character đang gây ra vấn đề. Tôi không có lời giải thích nào cho nó và cho đến nay tôi không thể tìm thấy thông tin về cách giải quyết hoặc thoát khỏi điều đó.

Do đó, tôi đã tìm kiếm một lệnh để có được thời gian mà không sử dụng nhân vật bị nghi ngờ.

Hoặc sử dụng Ruby cho ngày & giờ

Điều này dẫn tôi đến Ruby, tạo ra ngày & giờ hiện tại từ lệnh:

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

Khi chúng tôi chỉnh sửa đầu ra một chút với awk, loại bỏ khoảng trắng và dấu phân cách, chúng tôi có những gì chúng tôi muốn một lệnh làm việc trong .desktoptệp, vì chúng tôi không sử dụng %:

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


nhập mô tả hình ảnh ở đây

Ghi chú!

Không còn nghi ngờ gì nữa, lệnh có thể "say mê" một chút, tôi có thể sẽ chỉnh sửa câu trả lời một chút hôm nay hoặc ngày mai.


Đẹp! Đây chắc chắn là một cách khác để làm điều đó. Tôi chưa cài đặt Ruby nhưng một khi nó được cài đặt, nó chắc chắn hoạt động. Tôi đồng ý rằng loay hoay với điều này, bạn có thể khiến nó trông giống như bạn muốn. :)
Terrance

@Terrance nó hóa ra là một câu hỏi thú vị. Chưa bao giờ gặp sự cố trong .desktopcác tệp như thế này trước đây ...
Jacob Vlijm

Tôi cũng không. Thật tốt khi biết, và tôi đã thấy rằng việc trả lời những câu hỏi như thế này rất nhiều lần chúng ta cũng tự học rất nhiều. :)
Terrance

1
@Terrance 99% những gì tôi biết tôi đã học được khi trả lời các câu hỏi :)
Jacob Vlijm

1
Bạn đã truyền cảm hứng cho tôi để thay đổi từ ngữ của tôi trong câu trả lời của tôi là tốt. Tôi đã thay đổi tôi thành một cách thay vì cách tốt nhất. Và những thay đổi khác như vậy để mọi người không nghĩ rằng đó là cách duy nhất. Cảm ơn bạn! :)
Terrance
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.