在 Ubuntu 16.04 中,我(最终)想要将一个文本文件拖放到桌面图标上并运行 Node.js 应用程序,处理拖放的文件并输出一个新文件。
我已经发现了.desktop
文件,并正在尽力了解如何使用基本设置使该过程正常工作。我目前有三个文件:两个文件位于目录中,/home/blackslate/Utilities/
一个文件位于我的桌面上。
实用程序文件
convert.js
名为:的文本文件
const fs = require('fs');
const crypto = require('crypto');
const random = crypto.randomBytes(4).toString('hex');
const filename = random + '.txt'
fs.appendFile(filename, 'Hello ' + random + '!', function (err) {
if (err) throw err;
console.log(filename + ' saved');
});
名为的可执行文件convert.sh
:
#!/bin/sh
node ./convert.js
gnome-terminal -e "bash -c 'echo hello world; sleep 3'"
桌面文件
名为的可执行文件convert.desktop
:
[Desktop Entry]
Exec=gnome-terminal -e "/home/blackslate/Utilities/convert.sh \"%u\""
Icon=utilities-terminal
Type=Application
Name=Convert
事情的经过如下:
如果我
node ./convert.js
从终端窗口调用,我会看到:- 将创建一个新文件,其名称将显示在“终端”窗口中
如果我
./convert.sh
从终端窗口调用,我会看到:- 将创建一个新文件,并且其名称将显示在同一个终端窗口中
- 第二个终端窗口打开,并显示
hello world
3 秒后关闭
如果我单击转换桌面文件,我会看到:
- 打开一个终端窗口,显示一堆文本,然后立即关闭
- 第二个终端窗口打开,并显示
hello world
3 秒后关闭 - 没有创建新的文本文件
显然convert.sh
文件中的第二个命令正在执行,但第一个命令似乎出了问题。我可以采取哪些步骤来调试和修复这个问题?
答案1
.desktop 可以轻松运行 bash 脚本
你应该在你的文件中进行以下更改convert.sh
:
#!/bin/bash
# set prompt to the working dir with cd
cd /home/blackslate/Utilities/
node ./convert.js
# You want some text notification? Use notify-send
notify-send -t 3000 'echo hello world'
请注意,您可以将节点./convert.js的输出重定向到变量并将其用作通知文本......
MYVAR=$(node ./convert.js)
然后notify-send -t 3000 "Convert" "$MYVAR"
你可以在.desktop
文件中做一些更改
在那里找到图标/usr/share/icons
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Exec='/home/blackslate/Utilities/convert.sh'
Name=Convert
Icon=utilities-terminal