Criando um Alias ​​para um Script Bash

10

Então eu tentei experimentado e criou um aliasem .bashrc. No entanto, quando testo o comando, recebo:

[rkahil@netmon3 ~]$ menu
-bash: menu: command not found

Aqui está o que eu tenho no .bashrcarquivo:

# Source global definitions

if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and functions
alias menu='./menuScript.sh'
alias vi='vim'

O engraçado é que quando eu criei o pseudônimo vi, funcionou. Mas o menu não. Procurei posts anteriores no UnixStackExchange e tentei seguir outros posts, mas sem sucesso. Alguém mais tem sugestões?

ryekayo
fonte
1
você tentou com o alias menu = 'bash ./menuScript.sh'? (Eu não estou em uma máquina linux, não pode testá-lo)
Con7e
De onde você está executando o 'menu'? Se não for o mesmo diretório que 'menuScript.sh', ele reclamará de um 'comando não encontrado'. Talvez você deva usar um caminho absoluto?
garethTheRed
1
@garethTheRed Diria./menuScript.sh: command not found
Michael Mrozek
@MichaelMrozek - fair one. Acabei de verificar e ele disse No such file or directory, que ainda não é o mesmo que o erro do OP. O ponto ainda permanece - seria melhor com um caminho absoluto, a menos que o alias sempre seja usado apenas no diretório em que menuScript.shreside.
garethTheRed
1
@ryekayo done :)
Con7e

Respostas:

9

Você deveria tentar com alias menu='bash ./menuScript.sh'. No momento, não estou em uma máquina Linux, portanto não posso testá-la, mas deve funcionar. Quando você chama o alias, ele não sabe o que fazer com o caminho, portanto, você deve incluir o bashno início.

E redefinir o terminal ajuda depois de fazer a alteração.

Con7e
fonte
Não entendo como o primeiro parágrafo é importante - a menos menuScript.shque não tenha sido chmodeditado para executável; nesse caso, a mensagem de erro teria sido "Permissão negada". Suspeito que forçar uma releitura do .bashrcarquivo seja a resposta. ………………… PS O shell sabe o que fazer com o caminho da mesma maneira que faz se o usuário digitar ./menuScript.sh- tentando executar o arquivo.
Scott
7

Quando você faz

alias menu='./menuScript.sh'

você cria um apelido que diz "esse arquivo", mas não diz o que realmente deve fazer com ele.

No entanto, se você fizer

alias menu='source ./menuScript.sh'

ou

alias menu='. ./menuScript.sh'

Você está dizendo execute esse arquivo.

Michael Durrant
fonte
6

Você se lembrou de ter originado seu arquivo ~ / .bashrc depois de fazer as alterações? Como as alterações entram em vigor no seu arquivo .bashrc após reiniciar o computador ou simplesmente buscar o arquivo.

cbora
fonte
2
Esse tipo de postagem parece ser mais adequado para um comentário.
HalosGhost
2
@HalosGhost Como você figura? É a primeira coisa que eu pensaria também, isso causaria exatamente isso
Michael Mrozek
@MichaelMrozek, sugiro isso apenas porque me parece que as postagens de resposta devem oferecer uma solução definitiva, por exemplo, "Você esqueceu de buscar sua fonte .bashrc, faça o seguinte ...". Por outro lado, perguntas esclarecedoras (por exemplo, "Você esqueceu de ...?") Parecem mais adequadas para comentários. Não seria preciso reformular muito para fazer esta postagem parecer muito mais adequada a uma resposta.
HalosGhost
Ao reiniciar o computador, você só precisa sair do tty ou da sua sessão (se estiver usando um gerenciador de login). Se você estiver conectado a um ambiente gráfico e não quiser source ~/.bashrcou . ~/.bashrc, poderá também abrir outro shell. É simples assim. Não é necessário reiniciar.
Dylan
0

A razão pela qual ele trabalhou vimé porque esse é um programa que já pode ser chamado sem um caminho direto. Você não precisa dizer explicitamente "Eu quero que isso seja executado como um programa" porque vimjá é um. É codificado no sistema operacional que, quando recebe o comando vim, executa o arquivo /usr/bin/viou onde quer que esteja o programa real.

Nathanael Morgan
fonte
Não, não é codificado no sistema operacional. Existe um arquivo chamado vimdisponível no $PATHque pode ser um executável binário, um script executável ou até mesmo um link simbólico para outro programa. Se você remover a entrada, vimela deixará de estar disponível para os usuários.
roaima
@roaima O que eu quis dizer foi que chamar vim é um pouco diferente de chamar um programa personalizado. Eu ver o que você está recebendo em, no entanto, e concorda
Nathanael Morgan
Eu tenho um script chamado ifvique mora no meu $HOME/bin(que acontece no meu $PATH). Eu apenas o uso exatamente da mesma maneira que posso executar um binário instalado no sistema. Realmente não importa que seja um programa personalizado.
roaima
0

Há dois problemas com o alias

alias menu='./menuScript.sh'
  1. Exige que você esteja em um diretório específico ao chamar o alias. Se você estiver em um diretório onde menuScript.shnão existe, o alias falhará na execução.

    Seria melhor se você especificasse o caminho absoluto completo para o menuScript.shscript ao definir o alias, por exemplo,

    alias menu="$HOME/local/bin/menuScript.sh"

    ou similar.

  2. Como outros já disseram, outra razão pela qual o alias pode falhar é que o script não é executável ou que possui uma #!linha inválida . Verifique se o script é executável com

    chmod +x menuScript.sh

    e que a primeira linha do script é

    #!/bin/bash

    ou qualquer que seja o caminho bash(ou qualquer shell para o qual o script seja escrito) em seu sistema.

Kusalananda
fonte