# UPDATE: index. js содержимое файла добавлено. У меня есть это электронное приложение, которое выполняет некоторые bash скрипты (*. sh) файлы для выполнения некоторой задачи.
Все работает абсолютно нормально в development environment
, но когда building
производственная сборка для deb
установщика для платформы Ubuntu , все работает, например, открытие в приложении, другие NodeJS вещи, но bash скрипты не выполняются.
Постановка проблемы : Как выполнить shell scripts
в производственной сборке электронного приложения для Linux (ОС Ubuntu). Получение этой ошибки
app / terminal_scripts / timer. sh Not Found
Ниже приводится подробное описание приложения.
** Настройка каталога проекта **:
ProjectName
|
app> css | изображения | js | оказывает | terminal_scripts
node_modules
package. json
package-lock. json
Где внутри каталога приложения у меня есть все CSS, изображения, js, HTML и сценарии терминала.
пакет. json:
{
"name": "timer",
"productName": "Timely",
"version": "1.0.25",
"description": "This desktop app shows you system clock",
"main": "app/js/main/index.js",
"scripts": {
"start": "electron .",
"test": "echo \"Error: no test specified\" && exit 1",
"watch": "nodemon --exec 'electron .'",
"dist": "electron-builder"
},
"homepage": ".",
"keywords": [
"Electron",
"Desktop App"
],
"author": "NotABot Ltd <contact@notabot.com>",
"contributors": [
{
"name": "Not A Bot",
"email": "nab@notabot.com"
}
],
"license": "ISC",
"dependencies": {
"desandro-matches-selector": "^2.0.2",
"electron-context-menu": "^1.0.0",
"electron-is": "^3.0.0",
"fix-path": "^3.0.0",
"isotope-layout": "^3.0.6",
"jquery": "^3.5.0",
"jquery-bridget": "^2.0.1"
},
"build": {
"appId": "com.test.timely",
"productName": "Timely",
"linux": {
"target": "deb",
"category": "System"
}
},
"devDependencies": {
"electron": "^8.1.1",
"electron-builder": "^22.6.0"
}
}
HTML:
<html>
<head>
<title>Timely</title>
</head>
<body>
<button onclick="displayTime()">Display Time</button>
<textarea rows="20" cols="90" id="command-output" disabled="true"></textarea>
<script>
const {app} = require('electron');
function displayTime(){
console.log("button clicked");
let cmd = `bash app/terminal_scripts/timer.sh`;
let completeMessage = 'This is the message';
backgroundProcess(cmd, completeMessage);
}
function getCommandOutput() { return document.getElementById("command-output"); };
function getStatus() { return document.getElementById("status"); };
function appendOutput(msg) { getCommandOutput().value += (msg+'\n'); };
function setStatus(msg) { getStatus().innerHTML = msg; };
function backgroundProcess(cmd, completeMessage){
const process = require('child_process');
var child = process.execFile(cmd, [] , {shell: true} );
appendOutput("Processing......");
child.on('error', function(err) {
appendOutput('stderr: '+err );
});
child.stdout.on('data', function (data) {
appendOutput(data);
});
child.stderr.on('data', function (data) {
appendOutput(data );
});
return new Promise((resolve, reject) => {
child.on('close', function (code) {
console.log(`code is: ${code}`);
if (code == 0){
setStatus(completeMessage);
resolve(1);
}
else{
setStatus('Exited with error code ' + code);
resolve(-1);
}
});
});
}
</script>
</body>
</html>
Bash Скрипт :
#!/bin/bash
timer="$(date)"
echo "$timer"
Для этого файла оболочки установлено разрешение 777
Информация о платформе :
- ОС: Ubuntu 18.04.4 LTS
- NodeJS: 13.6. 0
- NPM: 6.14.5
- Электрон: 8.1.1
- Электронный строитель: 22.6.0
индекс . js
const {app, BrowserWindow, Menu, Tray, ipcMain, MenuItem} = require('electron');
const path = require('path');
const contextMenu = require('electron-context-menu');
let splashWindow;
function createMainWindow(){
mainWindow = new BrowserWindow({
minHeight: 700,
minWidth: 800,
webPreferences: {
nodeIntegration: true,
webviewTag: true
},
show: false
});
//For dev only
// mainWindow.webContents.openDevTools();
mainWindow.loadFile('app/renderer/index.html');
mainWindow.maximize();
}
app.on('ready', () =>{
createMainWindow();
});