在 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
文件中的第二个命令正在执行,但第一个命令似乎出了问题。我可以采取哪些步骤来调试和修复此问题?
.desktop 可以轻松运行 bash 脚本
您应该更改以下内容
convert.sh
:请注意,您可以将 node ./convert.js 的输出重定向到一个变量并将其用作通知文本......
MYVAR=$(node ./convert.js)
然后notify-send -t 3000 "Convert" "$MYVAR"
.desktop
您可以在文件中进行一些更改找到那里的图标
/usr/share/icons