Waz
Sage

Tipitaka
Level 25
Warrior
24th September 2017 13:34:22

Hello world,

I've created a very simple script to run zezenia using a single shell command.

To do this I first had to run a terminal client, xfce-terminal.

inside the terminal I created a new file in /usr/local/bin directory using nano text editor with root privileges.

/usr/local/bin directory is a binary directory, you can run any application from anywhere in a terminal client when an application is stored there.

So first I had to become root.

$ su

Then I had to create a file and store it inside /usr/local/bin

# nano /usr/local/bin/zezenia

I had to insert the first line of every bash script

#!/bin/bash

Then I had to create a function to change the directory to the downloaded and uncompressed zezenia folder using a bash command called cd.

The function name is ebin ()

ebin ()
{
cd '/home/bem/Downloads' ;
./zezeniaclient
}
ebin

Then I saved it and gave it privileges so I could run It as a common user

# chmod a+x


It was time to switch to my regular user account and to run zezenia with the command below.


$ . zezenia
Waz
Sage

Tipitaka
Level 25
Warrior
24th September 2017 13:40:12

A história completa.

Do programa cd utilizei:
O nome, cd
A sinópse, cd [-L|-P] [directory]
A descrição, O programa cd é utilizado para mudar o diretório atual de um ambiente terminal. É a
abreviação de change directory.

Escrevi um programa em bash:

O nome, ebin.

- Tive problemas para mudar o diretório e executar o binário do programa.
- Abri o navegador.
- Entrei no site do Google.
- Escrevi no campo de pesquisa do Google: "cd bash script"
- Visitei algumas páginas até que,
- Encontrei um resultado na página do stackoverflow

O link da página,
https://stackoverflow.com/questions/874452/change-current-directory-from-a-script

O usuário winden, escreveu uma solução e explicou porquê é uma solução.

- Ele disse que é preciso converter o script em uma função shell.

Então escrevi a função shell ebin para mudar o diretório e executar um binário.

function ebin() { cd /home/bem/Downloads & exec optirun ./zezeniaclient & }

Não funcionou.

Então fiz nova pesquisa no Google:

using echo to execute shell commands

Entrei no primeiro site da lista, stackexchange.

O link:
https://unix.stackexchange.com/questions/244372/how-to-execute-shell-command-produced-using-echo-and-sed

O usuário dhag tinha 8,303 publicações, 3 medalhas de ouro, 17 de prata e 32 de bronze.

Ele respondeu que para usar echo e escrever um comando bash é preciso escrever:

echo "comando argumentos" | bash

Ele também diz que é possível passar como um argumento do shell.

bash -c "$(echo "comando argumentos")"

E também diz ser possível executar o bash na função integrada eval:

eval "$(echo "comando argumentos")"

Nenhuma dessas propostas fizeram o programa cd funcionar.

Então, fiz uma nova busca por "using cd in bash script"

Entrei novamente no site do stackoverflow:

https://stackoverflow.com/questions/255414/why-doesnt-cd-work-in-a-bash-shell-script

compie diz:

Olha, para se livrar desse problema use o meio de indicação e escreva:

alias ebin="cd /home/bem/Downloads"

Mas ele não diz como utilizar essa indicação, então pesquisei:

"how to use an alias in bash script"

O acesso dessa vez é ao site askubuntu.com.

Seu link https://askubuntu.com/questions/98782/how-to-run-an-alias-in-a-shell-script

Desisti de dar continuidade no askubuntu.com.

Voltei para o site do stackoverflow

https://stackoverflow.com/questions/255414/why-doesnt-cd-work-in-a-bash-shell-script

DigitalRoss disse:

É preciso definir uma função para fazer isso, porquê não funciona sendo invocado como um
simples comando.

Então, nos finalmente o que fez funcionar foi a função abaixo

ebin ()
{
cd '/home/bem/Downloads/' ;
optirun ./zezeniaclient
}

Por algum motivo tive problemas em executar tudo em uma única linha, o script retornava o erro Unexpected end of file até funcionou de forma estruturada, linha por linha.

Bye.