如何在终端执行.desktop文件?

sh/bash/dash/ksh/zsh等Shell脚本
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

Re: 如何在终端执行.desktop文件?

#17

帖子 aerofox » 2009-09-03 22:00

mir_lww 写了:直接在终端输入:

代码: 全选

sh xxx.desktop
不需要可执行权限。
修改Screenlets时无意中发现的~~~

不过xxx.desktop 的写法要一个限制:包含“Exec”那一行,“=”和要执行的程序之间要留一个空格。也就是Exec=XXX是无法通过“sh xxx.desktop”执行,正确的是Exec= XXX。
很奇怪的sh。。。。。。。
这么执行确实是……碰巧罢了,而且可能会有副作用啊。
如果 Name 中包含几个单词:
Name=A sample application
那么会意外地执行一些程序或报错(本例中试图执行 sample)。
头像
Ur@nus
帖子: 622
注册时间: 2006-12-01 23:02

Re: 如何在终端执行.desktop文件?

#18

帖子 Ur@nus » 2009-11-21 18:14

xiooli 的思路很好但是命令中有等号就不行了。比如
#!/usr/bin/env xdg-open

[Desktop Entry]
Version=1.0
Encoding=UTF-8
Name=Google Reader
Exec=/opt/google/chrome/google-chrome --app="http://www.google.com/reader/view/#"
Terminal=false
Icon=/home/uranus/.fvwm/HUD/HUD_Transparant_Leopard_Icons_by_bodysoulspirit/HUD_Transparant_Leopard_Icons_by_bodysoulspirit/White Border/transdock/Calendar.png
Type=Application
Categories=Application;Network;WebBrowser;
MimeType=text/html;text/xml;application/xhtml_xml;

把“Exec=”后面的用sed提取出来(也就是把前面的段去掉)可以了。

#!/bin/bash
eval "`grep [eE]xec $1|sed 's/[Ee]xec=//'`"

存成desktop.sh
然后想运行*.desktop文件就直接 ./desktop.sh Google_Reader.desktop 就ok了。

xiooli不好意思哈,在你的命令基础上改的。 :em04
头像
zhu527812567
帖子: 883
注册时间: 2009-11-17 12:29
联系:

Re: 如何在终端执行.desktop文件?

#19

帖子 zhu527812567 » 2009-11-21 18:55

2L的是关键
抽取 Exec=后面的那个命令行
头像
INUYASHA
帖子: 366
注册时间: 2007-03-16 15:42

Re: 如何在终端执行.desktop文件?

#20

帖子 INUYASHA » 2009-11-29 22:38

mir_lww 写了:直接在终端输入:

代码: 全选

sh xxx.desktop
不需要可执行权限。
修改Screenlets时无意中发现的~~~

不过xxx.desktop 的写法要一个限制:包含“Exec”那一行,“=”和要执行的程序之间要留一个空格。也就是Exec=XXX是无法通过“sh xxx.desktop”执行,正确的是Exec= XXX。
很奇怪的sh。。。。。。。
貌似直接在终端运行
Exec= 程序
exec= 程序

exec 程序 结果等效

直接Exec 程序
提示bash: Exec: command not found

真是奇怪的bash 貌似其内部有个纠错规则
tusooa
帖子: 6548
注册时间: 2008-10-31 22:12
系统: 践兔
联系:

Re: 如何在终端执行.desktop文件?

#21

帖子 tusooa » 2010-01-31 18:58

Exec= app
执行app,将Exec的值设为。
exec= app
执行app,将exec的值设为。
exec app
用app替代这个shell
Exec app
执行Exec,将命令行参数设为app。

代码: 全选

grep '^Exec=' file.desktop | sed -e 's!^Exec=!!;q'
这个是正解

代码: 全选

] ls -ld //
回复