O seguinte se comporta da mesma forma no Fedora e no CentOS.
cd mydirectory
trabalho.
cd notadirectory
funciona (obtém um erro do Bash).
Contudo,
cd `
me dá algum tipo de prompt:
>
Nada do que eu pensei em entrar dá uma resposta, ele simplesmente segue para a próxima linha para solicitar novamente. Eu simplesmente uso CTRL+ Cpara voltar ao meu root@localhost
.
Qual é o propósito disso e o que se pode fazer com isso?
Obrigado!
>
que sobre a crase, uma vez que também pode ocorrer em outras situaçõesRespostas:
O que você digitou é um backtick - é o início de uma instrução para bash para avaliar o que você digita como um comando. O
>
é exibido para indicar que você ainda está digitando o comando na próxima linha.Se você fechar o backtick, verá que todo o comando será executado. Por exemplo
fonte
cd `dirname \`which ls\``
= cd para o diretório em que o binário "ls" está localizado. (ou seja,cd /bin
uma vez que é/bin/ls
) [edit: ufa, escapando que remarcação é difícil]$()
a``
. Seu exemplo (mais a citação correta) se tornariacd "$(dirname "$(which ls)")"
muito menos insana.$()
sobre aspas.A resposta de JohnC já explica o backtick. Mas o que você também está se perguntando é o
>
prompt. Isso é um prompt de continuação e não é apenas acionado por um backtick, mas sempre quando seu shell sabe claramente que você não terminou de digitar um comando. O exemplo mais fácil é colocar uma continuação de linha explícita\
no final de uma linha de entrada (o que ajuda a dividir a entrada longa):Observe que, assim como
PS1
controla a aparência do prompt de comando, você também podePS2
alterar o prompt de continuação, por exemploExistem muitas razões para a continuação ocorrer. Um único backtick está incompleto, mas você também pode inserir algo como
em uma única linha (nota lateral: É recomendado para usar
$(
e)
em vez disso, uma vez que os parênteses tornar óbvio que a expansão começa e termina, enquanto backticks individuais tornam mais difícil para ver onde um está desaparecido e aninhamento ....). Outras razões possíveis para um prompt de continuação:done
depoiswhile
oufor
fi
depois de umif
esac
depoiscase
(cd $HOME; cat .bashrc)
|
, bem como a execução condicional||
e&&
(&
embora não , já que isso está apenas executando o comando em segundo plano)'
ou"
)Curiosamente, uma chave ausente
}
após uma expansão variável${
também causa um prompt de continuação, mas falhará devido ao espaço inserido:fonte
Isso significa que seu comando ainda não está completo. De fato, o caractere backtick,,
`
é usado para delimitar um comando embutido.Exemplo:
fonte
O backtick inicia / termina a substituição do comando. O shell lê o comando dentro dos backticks, interpreta os resultados e coloca esses resultados no comando. Por exemplo:. ls
which cp
resulta na execução de "qual cp" e o resultado desse comando, ou seja, / bin / cp será usado como argumento para o comando ls. Esse comportamento, no entanto, foi preterido, em favor da substituição de comandos $ (cmd) mais explícita e legível.Ao digitar cd `O shell espera que um comando seja executado e siga com um backtick.
No caso da expansão variável usando chaves, o shell apresenta o prompt de continuação porque essas chaves são avaliadas lexicamente antes da expansão.
fonte