Ошибка возникает из-за попытки выполнить файл ~/.profile
с sh
, который не понимает source
(sh
, вместо этого использует.
(точку ), которая также работает в bash
и всех других оболочках POSIX ).
Кроме того, выполнение ~/.profile
не установит переменные среды, которые этот файл устанавливает в оболочке, которая его выполняет. Это потому, что он работает в своей собственной подоболочке.
Дочерняя оболочка (, которую вы получаете при выполнении ~/.profile
, а не из источника ), никогда не повлияет на среду родительской оболочки (оболочки, из которой вы выполняете скрипт ). Поэтому вы не можете установить переменные в ~/.profile
и ожидать, что они будут затем установлены в вашем скрипте, если только вы не source
файл.
Запуск sudo source ~/.profile
здесь не поможет, так как sudo
будет дочерним процессом текущей оболочки.
Связанная, дополнительная информация:
Чтобы настроить среду для сценария, который не запускается из интерактивной оболочки (, где ~/.profile
и ~/.bashrc
уже получены ), установите переменную BASH_ENV
в соответствующий файл при вызове сценарий. Это сделает bash
исходным файлом $BASH_ENV
, прежде чем передать управление вашему сценарию.
Например:
BASH_ENV="$HOME/.profile" "$HOME/scripts/myscript.sh"
Это необходимо только при вызове сценария из не -интерактивной оболочки, например из задания cron, и если вам нужен доступ к переменным среды, установленным в ~/.profile
или к любому файлу. что ~/.profile
источники.
В сеансе интерактивной оболочки переменную BASH_ENV
не нужно задавать таким образом, и сценарию не нужно использовать источник ~/.bashrc
или ~/.profile
, поскольку они уже были получены.
Вы не убиваете порт, вы убиваете демон/службу, которая его открыла. Вы можете заблокировать трафик на порт с помощью firewalld или iptables.
Прежде всего, попробуйте telnet localhost 50070
. Вы можете подключиться?
Если да, выполните эту команду:
sudo ss -tulp
(sudo не требуется, если вы выполняете команду от имени пользователя root. -Параметр p показывает процессы и требует повышенных прав)
Найдите строку с упоминанием порта 50070. Используйте grep
, если у вас много прослушиваемых портов. В последнем столбце будет показано имя и PID, открывший порт. Убейте это, и оно должно закрыться.