вы можете сделать это с помощью awk
awk 'FNR==NR{a[$1];next};!($1 in a)' file1 file2
У меня похожая проблема на одной системе, которую я использую (оболочка по умолчанию bash
, я хочу ksh93
, а chsh
не работает).
Мое решение, адаптированное для вашей ситуации, состоит в том, чтобы exec
желаемую оболочку из ~/.profile
, который Dash считывает при запуске. Bash не трогает ~/.profile
, если не находит ~/.bash_profile
или ~/.bash_login
(в таком порядке, см. руководство по Bash).
# in ~/.profile:
if [ "$SHELL" != "/usr/bin/bash" -a -n "$SSH_TTY" -a -x /usr/bin/bash ]; then
export SHELL="/usr/bin/bash"
exec $SHELL -l
fi
SSH устанавливает SSH_TTY
в интерактивных сеансах SSH, поэтому мы проверяем, установлен ли он (непустая строка), прежде чем убедиться, что Bash доступен и выполнить его. Я устанавливаю и экспортирую SHELL
на случай, если какое-либо другое приложение посмотрит на него, и чтобы избежать бесконечного цикла работы Bash из-за отсутствия ~/.bash_profile
и ~/.bash_login
и, таким образом, попытки повторного выполнения ~/.profile
.