Por que o “sudo cd” não funciona?

Respostas:

56

cdé um shell embutido. sudosó funciona com executáveis. Você poderia fazer isso, sudo sh -c 'cd dirname'mas assim que o shell sair, você retornará ao diretório em que iniciou. Se você diz o que está tentando realizar, posso ajudá-lo a encontrar uma maneira de fazer isso.

Dennis Williamson
fonte
2
Mas sudo pwdtambém não funcionaria? (Eu sempre imaginei que sudo cd faz o trabalho, mas você simplesmente não estamos vendo o resultado depois sudoretorna. Mas isso foi apenas um palpite. Talvez nem cdnem pwdsão realmente incorporado em Bash em um Mac. Correr which cd faz de fato me dar resultados. Correndo sudo cd /não me dá um erro, mas na verdade não resulta em um diretório de trabalho alterado).
Arjan
2
@Arjan: pwdtambém é um executável externo, por isso funcionará. Observe que em alguns sistemas, existe um cdexecutável, mas é principalmente inútil. Tente usá- type -a cdlo muito mais informativo do que which, a propósito.
Dennis Williamson
1
Agradável! type -a cdmostra ambos cd is a shell builtine cd is /usr/bin/cdno meu Mac. E da mesma forma para pwde echo. E ambos sudo pwde sudo echo "Hello world"me dão um resultado. No entanto, type -a returnapenas rende return is a shell builtine sudo return 3me mostra sudo: return: command not found. Então, acho que a pergunta é: o OP recebe uma mensagem de erro ou o OP não vê o cdtrabalho sem nenhum erro? (Ou: o que OS é o OP usando.)
Arjan
sudo sh -c 'cd dirname'não faz nada por mim.
Peter Niederwieser
1
@ Arjan Encontrei a explicação: É algo como um hack de compatibilidade profunda. Ele não faz sua função, mas veio dos efeitos colaterais que o real cdtem. E não pode fazer nada em vez de falhar quando o shell atual não possui um cdcomando. Qualquer concha que possa ser usada por humanos tem cd, inclusive /bin/sh. Mas um programa que é, visto no kernel do sistema operacional, um shell pode ser muito mais simples que isso, mesmo apenas algumas linhas de código. Consulte Qual é o objetivo do cdcomando externo?
Volker Siegel
72

Em vez disso, tente usar sudo -spara iniciar um shell raiz e depois simplesmente cdpara o diretório
Quando terminar como root, pressione CtrlDou digite exit.


Como Arjan sugere em seu comentário abaixo, é importante notar que, como root, pode-se facilmente danificar componentes essenciais do sistema. Use com cuidado!

oKtosiTe
fonte
4
Mas: tenha cuidado, uma vez que um é raiz ...
Arjan
7

Você pode simplesmente suse tornar root e cdtudo o que quiser ... Eu sei que uma resposta já foi aceita, mas se uma não estiver na lista de sudoers, essa é a única opção.

Alex
fonte
Por outro lado, se não houver senha de root ou você não souber, sudo é a única opção.
Liam