Почему «sudo bash && cd desktop» не переходит в папку рабочего стола?

Почему «sudo bash && cd desktop» не переходит в папку рабочего стола?

У меня есть папка с chmod 000правами доступа, в которой находится множество разных вещей. Чтобы попасть в нее, я bashзапускаю .sudosudo bash

Почему я не могу сделать &&? Я хочу попасть cdв каталог одной командой, например так:

sudo bash && cd desktop

Когда я запускаю это, я все еще нахожусь в ~каталоге, который является каталогом по умолчанию.

Мне придется запустить это вместо этого

sudo bash
cd desktop

Также, рабочий стол - это не папка, это подпапка рабочего стола, но это неважно. В любом случае это одно и то же.

решение1

Часть после этого &&выполняется в текущей оболочке, это не какой-то аргумент, переданный в тот, bashс которым вы работаете sudo.

У вас может возникнуть соблазн попробовать

sudo bash -c 'cd desktop'

но это не работает, потому что это bashзавершается после cd desktop.

Можешь попробовать:

sudo sh -c 'cd desktop && exec bash'

что "работает" (т.е. помещает вас в каталог desktopв оболочке Bash с uid=0). Я бы лучше выполнил две отдельные команды, чем эту одну строку.

решение2

Это работает, просто не так, как вы ожидаете. &&ждет, пока команда завершится. Если результат в этот момент будет true, он выполнит следующую инструкцию. Так что если вы введете bash && cd desktop, вам сначала будет представлена ​​оболочка bash. Если вы введете exit, вы вернетесь в ту оболочку, в которой вы были до этого, изатемкаталог изменится на папку рабочего стола.

С точки зрения описанной мной функциональности, sudo несущественен. Ваш вариант использования sudo, вероятно, не является лучшей практикой, и вам следует рассмотреть другие решения.

Связанный контент