O erro
No que diz respeito ao seu comando original, a resposta de terdon já cobre muito bem o que está acontecendo e o que deve acontecer. Vamos analisar isso um pouco mais detalhadamente.
O que você está tentando fazer é atribuição de variável, que deve tomar a forma de:
varName=value
No entanto, devido ao espaço, isso é tratado como um comando PATH
com argumento de linha de comando que consiste em =
, em seguida, conteúdo da variável $PATH
e substituição de comando de pwd
, todos unidos na mesma sequência :
PATH =$PATH:'pwd'
Naturalmente, não existe tal comando como PATH
, portanto, você receberá um erro.
O Shell trata os comandos simples e seus argumentos como uma lista de um ou mais tokens separados por espaço (talvez com atribuição de variável opcional antes disso). Em outras palavras, o formulário deve ser:
[VAR=value] word [arg1 [arg2 [arg3] ]...]
Claro, isso não é o desejado neste caso.
O comando adequado
Então o que deveria ter sido feito é este:
PATH=$PATH:'pwd'
Aqui temos uma atribuição de variável adequada, onde, de acordo com expansão order , bash
shell primeiro executaria a expansão de variável, ou seja, substitua $PATH
pelo que você tem nessa variável atualmente, execute a substituição de comando em que ela executa pwd
e substitui pela saída de pwd
. No final, tudo o que é atribuído de volta à variável PATH
.
Algumas observações importantes:
- Como isso é atribuição de variável, não é necessário citar a variável
$PATH
, mas normalmente você deve evitar um comportamento indesejável. Consulte Quando é necessário duplicar a cotação
A forma de - backticks de substituições de comandos não é recomendada atualmente . Neste caso em particular, tudo bem, mas em geral os backticks não se prestam muito bem a comandos de aninhamento e multi-linhas.
-
A variável
PATH
é usada pelo shell para encontrar comandos, e a ordem dos diretórios nessa lista define a precedência para onde os comandos seriam procurados. Assim, por exemplo, quando você executa um comando, o shell primeiro verifica se o comando é built-in , se não for, então olharia através de todos os diretórios na variável PATH
. O PATH=$PATH:$(pwd)
faria com que o shell percorresse todo o resto e só então chegasse ao diretório que foi dado por pwd
. Por contraste, PATH=$(pwd):$PATH
iniciaria a pesquisa no diretório retornado por pwd
first. Então, a ordem da tarefa é importante.