Хорошо, я иду на конечность здесь и предлагаю, чтобы Вы не должны были делать этого проекта и не открывали систему ни для кого, потому что необходимо защитить систему строго, но если Вы все еще хотите сделать это, здесь некоторые вещи, которые необходимо, по крайней мере, рассмотреть:
Из-за этого требования и поскольку необходимо перезагрузить систему в LFS для чувства вознагражденными (по крайней мере, с моей точки зрения) необходимо полагать, что предложение, возможно, предопределило виртуальные машины, где люди могут создать свою собственную систему LFS.
Из bash(1)
man page:
Aliases не расширяются, когда оболочка не является интерактивной, за исключением тех случаев, когда опция оболочки expand_aliases устанавливается с помощью shopt (смотрите раздел Описание магазина в разделе СТРОИТЕЛЬНЫЕ СТРОИТЕЛЬНЫЕ КОМАНДЫ ниже).
Bash (1) говорит
...
Когда интерактивная оболочка, которая не является системой входа в систему, запускается, Bash читает и выполняет команды от ~ / .bashrc, если этот файл существует.
...
Интерактивная оболочка одна запущена без аргументов без опции и без опции -C -C, стандартный вход и ошибка и ошибка подключен к клеммам (Как определяется isatty (3)) или один начался с опцией -i.
Итак, очевидно, вы либо источник .Bashrc вручную или запущены на -i
, если псевдонимы - это все, что вам нужно, я бы порекомендовал разделить их в E.g. . Ализа, а затем источник, что из них .bashrc и ваш скрипт, на всякий случай, находящийся в том, чтобы все прогнозировали в .bashrc, который может нарушить ваш скрипт, так как часто бывает
У меня была та же проблема, и сначала shopt -s expand_aliases
, похоже, не помогло. Я выяснил, что эти параметры должны быть установлены перед добавлением фактических псевдонимов. Поэтому, если псевдонимы созданы до того, как ваш .bashrc
установит параметры expand_aliases
, они будут недоступны. Следовательно, вы должны загрузить (или перезагрузить) псевдонимы после установки параметра.
Оболочка, которую вы получаете при удаленном выполнении команды с помощью SSH, не является ни интерактивной оболочкой, ни оболочкой входа в систему:
$ ssh server 'bash -c "echo $-"'
chsB
(нет i
и нет l
в ответе)
В случае Bash это означает, что ни один из обычных файлов инициализации не читается.
Вы можете заставить удаленную оболочку быть оболочкой входа в систему, добавив -l
к вашему вызову Bash, что означает, что он будет анализировать первый из ~ / .bash_profile
, ~ / .bash_login
и ~ / .profile
, которые он может найти, выполняя поиск в этом порядке, но не ~ / .bashrc
. Это означает, что вместо этого вам придется поместить свои псевдонимы в один из этих файлов.
Вы можете решить любую проблему, введя:
if [ -f /etc/skel/.bashrc ]; then. /etc/skel/.bashrc; fi
в первой строке.