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.
Mas sudo pwdtambém não funcionaria? (Eu sempre imaginei que sudo cdfaz 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 cdfaz 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!
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.
Respostas:
cd
é um shell embutido.sudo
só 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.fonte
sudo pwd
também não funcionaria? (Eu sempre imaginei quesudo cd
faz o trabalho, mas você simplesmente não estamos vendo o resultado depoissudo
retorna. Mas isso foi apenas um palpite. Talvez nemcd
nempwd
são realmente incorporado em Bash em um Mac. Correrwhich cd
faz de fato me dar resultados. Correndosudo cd /
não me dá um erro, mas na verdade não resulta em um diretório de trabalho alterado).pwd
também é um executável externo, por isso funcionará. Observe que em alguns sistemas, existe umcd
executável, mas é principalmente inútil. Tente usá-type -a cd
lo muito mais informativo do quewhich
, a propósito.type -a cd
mostra amboscd is a shell builtin
ecd is /usr/bin/cd
no meu Mac. E da mesma forma parapwd
eecho
. E ambossudo pwd
esudo echo "Hello world"
me dão um resultado. No entanto,type -a return
apenas rendereturn is a shell builtin
esudo return 3
me mostrasudo: return: command not found
. Então, acho que a pergunta é: o OP recebe uma mensagem de erro ou o OP não vê ocd
trabalho sem nenhum erro? (Ou: o que OS é o OP usando.)sudo sh -c 'cd dirname'
não faz nada por mim.cd
tem. E não pode fazer nada em vez de falhar quando o shell atual não possui umcd
comando. Qualquer concha que possa ser usada por humanos temcd
, 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 docd
comando externo?Em vez disso, tente usar
sudo -s
para iniciar um shell raiz e depois simplesmentecd
para o diretórioQuando 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!
fonte
Você pode simplesmente
su
se tornar root ecd
tudo 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.fonte