find exec не работает с псевдонимами команд?

Возникла та же проблема.

Оказывается, проблема решается добавлением параметра disable_interactive рядом с pam_mount.so в файлы конфигурации ( /etc/pam.d/common- {auth , сессия} ).

Он идет сразу после pam_mount.so , а параметры разделяются пробелами (из имени файла , поэтому и между каждыми двумя параметрами).

Когда код pam_mount.so запускается при входе в систему, он получает пароль из верхней части стека и использует этот пароль для расшифровки вашего тома.

Когда вы выполняете su из корневого сеанса, пароль не требуется, и поэтому pam_mount.so не получит никакого пароля. Таким образом, без параметра disable_interactive он попытается получить пароль.

К счастью, как видно из https://sourceforge.net/p/pam-mount/pam-mount/ci/master/tree/src/pam_mount.c , строка 493, pam_mount попытается продолжить работу даже без пароля, что хорошо, потому что пароль не нужен, если том уже разблокирован и смонтирован.

0
15.12.2019, 13:48
2 ответа

Опция -execдля findтребует чистых исполняемых файлов, в то время какalias-es являются функцией оболочки, что означает, что они существуют только тогда, когда вы находитесь внутри оболочки.

Вы можете запустить любую команду в оболочке, запустив -execbash -c command. Однако, чтобы псевдонимы принимались, оболочка должна запускаться в интерактивном режиме.

Вы можете обмануть интерактивность, выполнив bash -ic sha256, но поскольку вы поместили свое определение псевдонима в .bash_profile, вам также нужно будет обмануть его как «оболочку входа в систему», а также как интерактивную, потому что этот файл читаются так называемыми -«оболочками входа в систему». То есть вы должны выполнить bash -lic sha256. Но это медленнее и немного загрязняет журнал сеансов.

Поэтому я бы посоветовал вам лучше поместить определение вашего псевдонима в .bashrcфайл (, просто создать его, если его еще нет ), чтобы вместо этого ваш псевдоним мог использоваться более простым bash -iиз bash -li.

Это сделало бы всю вашу команду похожей на:

find./ -iname *.doc -exec bash -ic 'sha256 "$1"' -- {} \;

Если вам действительно необходимо сохранить определение псевдонима в .bash_profile, сделайте свою команду как:

find./ -iname *.doc -exec bash -lic 'sha256 "$1"' -- {} \;
4
28.01.2020, 02:15

Нет, ваш псевдоним происходит от bash. findожидает исполняемый файл в вашей PATHпеременной окружения. (если вы наберете which <cmd | alias>и ничего не получите, find будет жаловаться)

2
28.01.2020, 02:15

Теги

Похожие вопросы