Este test.sh
script:
cd test-1
source .venv/bin/activate
python test.py
deactivate
funciona bem no terminal no Ubuntu 20.04.6 com este comando:
nick@jetson:~$ ./test.sh
Quando eu o adiciono às Preferências de Aplicativos de Inicialização com:
não funciona. O que está errado?
Esta pergunta é diferente de Como inicio aplicativos automaticamente no login?. Não estou perguntando como inicio aplicativos automaticamente no login. Estou perguntando por que um comando diferente tem que ser usado na Command
linha de comando Add Startup program
do que o comando que eu digito no terminal em ~
pasta.
Quando você cria um "aplicativo de inicialização", o que acontece nos bastidores é:
~/.config/autostart
, contendo umaExec
linha que contém o "comando" que você especificou;Citando a seção relevante da página (ênfase minha):
Então, a razão pela qual
./test.sh
falha é simplesmente: ele não está em conformidade com nenhuma das especificações do Freedesktop, pois não é um caminho completo nem um nome de um executável.Observe também que há mais regras que um "comando" precisa obedecer (você pode encontrá-las na página que vinculei), mas passar por essas verificações geralmente funciona:
PATH
, você precisa colocar o caminho completo, caso contrário, você pode colocar apenas o nome do executável;env
(env foo=bar executable
). Se você precisar de algo mais, você pode usar principalmentesh -c
/bash -c
(sh -c '<input command1 | command2'
), ou criar um script wrapper em torno do seu script real.Se o seu script realmente não tiver um shebang (
#!/bin/bash
), uma solução seria executar:em vez disso. No entanto, a solução "correta" seria adicionar um shebang ao script e executar apenas:
O shebang é necessário em outros contextos (como ao executar o script de um shell que não é Bash) para fazer uso dos recursos do Bash, como por exemplo
source
quando o script é executado desh
.