2 SC2232
Joachim Ansorg edited this page 2021-11-12 19:53:17 +01:00

Can't use sudo with builtins like cd. Did you want sudo sh -c .. instead?

Problematic code:

sudo cd /root
pwd

Correct code:

sudo sh -c 'cd /root && pwd'

Rationale:

Due to the Unix process model, sudo can only change the privileges of a new, external process. It can not grant privileges to a currently running process.

This means that shell builtins -- commands that are interpreted by the current shell rather than through program invocation -- cannot be run with sudo. This includes cd, source, read, and others.

Instead you can run a shell with sudo, and have that shell run the builtins you want. Just be aware that what happens in that shell stays in that shell:

sudo sh -c 'cd /root && pwd'  # This shows /root
pwd                           # This shows the original directory

Exceptions:

None.

  • SuperUser: Why won't “sudo cd” work?
  • Help by adding links to BashFAQ, StackOverflow, man pages, POSIX, etc!