bash -c
no son los mismos en al menos los siguientes ejemplos:$ var='a
$(uname)'
$ bash -c 'echo "$1"' bash "$var"
a
$(uname)
$ bash -c "echo '$var'"
a
$(uname)
$ bash -c "echo \"$var\""
a
Darwin
find
también difieren:$ touch 'a
> $(uname)'
$ find. -exec sh -c 'echo "$@"' sh {} \;
.
./a
$(uname)
$ find. -exec sh -c "echo '{}'" \;
.
./a
$(uname)
$ find. -exec sh -c "echo \"{}\"" \;
.
./a
Darwin
$ find. -exec sh -c 'echo "{}"' \;
.
./a
Darwin
Entonces parece que lo siguiente permite la ejecución de código arbitrario:
bash -c "echo \"$var\""
find. -exec sh -c "echo \"{}\"" \;
find. -exec sh -c 'echo "{}"' \;
Это была проблема среды pip. Я действительно не понимаю этого, потому что я уверен, что шаги, которые решили это, не сработали в первые пару раз, когда я их пробовал... Но выполняя sudo apt-get remove awscli
, затем pip3 uninstall awscli
как оба пользователя, затем sudo pip3 install awscli
, наконец, установили это как я надеялся.
После прочтения десятков вопросов и ответов о pip все, что я знаю, это то, что я не понимаю, как различные версии pip взаимодействуют с --разрешениями пользователя и sudo. Я не собираюсь отмечать свой ответ как правильный, но с удовольствием рассмотрю любые другие ответы.