Como executar um script de shell com um argumento de arquivo localizado no mesmo diretório no script? [duplicado]

1

Eu gostaria de executar um comando com um argumento colocado no mesmo diretório que o script de shell, a partir de um script de shell.

exemplo:

my_installer.sh:


#!/bin/sh 
sudo dpkg -i --someflags=abcd blah.deb 

Como eu posso dizer my_installer.sh onde blah.deb é?

Eu tentei ./blah.deb e olhei para algumas env vars ... Eu recebo um erro sobre o arquivo não encontrado.

Estou assumindo que o usuário clicaria duas vezes no script ou o executaria de casa - não o cd para o local do script.

    
por Thalia 15.11.2014 / 00:13

2 respostas

3

De acordo com a pergunta: (a) o script está no mesmo diretório que blah.deb e (2) o usuário executará o script de algum outro diretório desconhecido. Nesse caso:

#!/bin/bash
sudo dpkg -i --someflags=abcd "${BASH_SOURCE[0]%/*}/blah.deb"

A linha shebang é atualizada para bash , para que possamos usar a matriz BASH_SOURCE , que informa a localização do script que está sendo executado.

Como isso evita a substituição de comandos, ele deve funcionar mesmo no caso patológico em que o nome do diretório termina com caracteres de nova linha.

    
por John1024 15.11.2014 / 00:27
1

Você pode primeiro digitar o script no local do script com

cd "$(dirname $0)"

ou use

sudo dpkg -i --someflags=abcd "$(dirname $0)"/blah.deb

Isso também funciona com / bin / sh sendo traço em vez de bash.

    
por Teemu Toivola 15.11.2014 / 00:31