Почему не работает баш
Перейти к содержимому

Почему не работает баш

  • автор:

Почему не запускаются BASH файлы в Win 10?

Я пытаюсь запустить любой .sh файл в моей win 10, но они не запускаются. введите сюда описание изображения Из под консоли git-bash всё работает, но это не выход. Такое впечатление, что винда просто не может найти bash . введите сюда описание изображения Вот что в переменной $PATH: введите сюда описание изображения Не совсем понимаю, как мне указать винде, где лежит баш. Править первую строку файла .sh или шаманить в $PATH? Спасибо! введите сюда описание изображения UPDATE Использование sh приводит к ошибке: sh : Имя «sh» не распознано как имя командлета, функции, файла сценария или выпо лняемой программы. А команда bash ./deploy.sh к таким ошибкам: введите сюда описание изображения

Отслеживать

задан 1 фев 2023 в 9:01

444 1 1 серебряный знак 17 17 бронзовых знаков

Потому что bash файлы не нативны для Windows и PowerShell. PowerShell ничего не знает о shebang строке. Пробуйте запускать через sh deploy.sh или bash deploy.sh

1 фев 2023 в 10:04

@insolor, см UPDATE

1 фев 2023 в 11:30

Пересохраните файл так, чтобы окончания строк были \n (LF), а не \r\n (CRLF), тогда ошибка с \r уйдет. Например, в vscode в панели статуса справа внизу переключатель: i.stack.imgur.com/K8qa7.png

1 фев 2023 в 11:44

@insolor, спасибо! добавление bash в команду, и LF решило проблему, теперь всё работает!

Форум русскоязычного сообщества Ubuntu

Страница сгенерирована за 0.032 секунд. Запросов: 25.

  • Сайт
  • Об Ubuntu
  • Скачать Ubuntu
  • Семейство Ubuntu
  • Новости
  • Форум
  • Помощь
  • Правила
  • Документация
  • Пользовательская документация
  • Официальная документация
  • Семейство Ubuntu
  • Материалы для загрузки
  • Совместимость с оборудованием
  • RSS лента
  • Сообщество
  • Наши проекты
  • Местные сообщества
  • Перевод Ubuntu
  • Тестирование
  • RSS лента

© 2012 Ubuntu-ru — Русскоязычное сообщество Ubuntu Linux.
© 2012 Canonical Ltd. Ubuntu и Canonical являются зарегистрированными торговыми знаками Canonical Ltd.

Почему bash не видит команды?

60937f765c63a988930011.png

Bash не видит команды?

  • Вопрос задан более двух лет назад
  • 1939 просмотров

1 комментарий

Простой 1 комментарий

Saboteur @saboteur_kiev Куратор тега Linux
в PATH не прописаны пути к этим командам
Решения вопроса 0
Ответы на вопрос 2
Интересная личность

Вероятно, переменная окружения PATH из вашего .bash_profile имеет неверное значение.

Попробуйте добавить минимальные пути, выполнив вот такую команду:

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

и проверить выполнение команд. Если заработало, то исправляйте .bash_profile

Ответ написан более двух лет назад
Нравится 2 9 комментариев

переменная окружения PATH из вашего .bash_profile имеет неверное значение.

В некоторых дистрибутивах программы находящиеся в каталогах /sbin и /usr/sbin не включены в пользовательский PATH (по моему Astra Linux из таких, какие еще не вкурсе).
Это делается вполне осознано. Программы, находящиеся в этих каталогах, требуют прав root, а у root эти каталоги включены в PATH. Так что все логично. Не следует ломать систему, только потому что вам кажется, что что-то не так.
apt-get — нужно запускать из-под root, так что используйте sudo apt-get, или su или просто залогиньтесь rootом.

Cпасибо за ответ. Выполнение вышеописанной команды не ломает систему (которая уже и так сломана?), а лишь даёт возможность проверить гипотезу относительно переменных окружения.

Если обратить внимание на приложенный топикстртером скрин, то видно, что у него не работет ни sudo, ни su, ни ln.

ivandao @ivandao Автор вопроса

t_q_l, эта проблема только в терминале IDE
Обычный трминал работат нормально и все команды исполняются (sudo, apt-get и т.д. установлены).
IDE Webstorm

Программы, находящиеся в этих каталогах, требуют прав root, а у root эти каталоги включены в PATH. Так что все логично

Например /sbin/ip, которая на нынешнем Linux является единственным способом узнать список своих адресов, маршрутов и т.д. Правда для всего этого не нужны root-права, но утилита всё ещё лежит в /sbin/. Тоже самое для service и lsmod; mkfs.* для подготовки дисков виртуальных машин в домашней директории очень нуждается в root правах(на самом деле нет). Они поломали консоль, вынуждая админов держать консоль постоянно под root. Если утилите не хватает прав для выполнение задачи, то она и сама может об этом сказать. А без прав утилита сломать ничего не сможет.

Они поломали консоль

Это слишком сильно сказано. Отчасти я с вами согласен, разрабам дистрибутивов следует более критично относится к набору программ в sbin.
Но в целом подход правильный, собственно о том же пишут и в Filesystem Hierarchy Standard.
Правда, у автора вопроса совсем другая ситуация. А этот вопрос достаточно холиварный.

Почему не работает команда в BASH скрипте?

Есть у меня BASH-скрипт. В нем в частности есть такие строки:

 # Формируется команда монтирования CMD="/bin/mount /dev/$1 $ -t $ -o $ && /bin/echo /dev/$1 $ $ echo "CMD: $" >> $ echo "CMD: $" # Выполняется команда монтирования $

Когда я его запускаю (из-под рута), вначале на экран выводится команда, которая должна выполнится. Затем она выполняется.

Однако, эта команда (содержащая mount) не срабатывает, монтирование не происходит, выдается сообщение о том, какие опции команды mount есть:

# ./media_mount sdc1 mount CMD: /bin/mount /dev/sdc1 /media/usb/FreeAgent_Drive_048C1A2B8C1A17AE -t ntfs-3g -o defaults,iocharset=utf8,umask=007,gid=46,force && /bin/echo /dev/sdc1 /media/usb/FreeAgent_Drive_048C1A2B8C1A17AE ntfs-3g defaults,iocharset=utf8,umask=007,gid=46,force 0 0 >> /etc/fstab Usage: mount -V : print version mount -h : print this help mount : list mounted filesystems mount -l : idem, including volume labels So far the informational part. Next the mounting. The command is `mount [-t fstype] something somewhere'. Details found in /etc/fstab may be omitted. mount -a [-t|-O] . : mount all stuff from /etc/fstab mount device : mount device at the known place mount directory : mount known device here mount -t type dev dir : ordinary mount command Note that one does not really mount a device, one mounts a filesystem (of the given type) found on the device. One can also mount an already visible directory tree elsewhere: mount --bind olddir newdir or move a subtree: mount --move olddir newdir One can change the type of mount containing the directory dir: mount --make-shared dir mount --make-slave dir mount --make-private dir mount --make-unbindable dir One can change the type of all the mounts in a mount subtree containing the directory dir: mount --make-rshared dir mount --make-rslave dir mount --make-rprivate dir mount --make-runbindable dir A device can be given by name, say /dev/hda1 or /dev/cdrom, or by label, using -L label or by uuid, using -U uuid . Other options: [-nfFrsvw] [-o options] [-p passwdfd]. For many more details, say man 8 mount .

Я копирую команду, которая была выведена на экран:

/bin/mount /dev/sdc1 /media/usb/FreeAgent_Drive_048C1A2B8C1A17AE -t ntfs-3g -o defaults,iocharset=utf8,umask=007,gid=46,force && /bin/echo /dev/sdc1 /media/usb/FreeAgent_Drive_048C1A2B8C1A17AE ntfs-3g defaults,iocharset=utf8,umask=007,gid=46,force 0 0 >> /etc/fstab

выполняю её в консоли под рутом, и она выполняется без ошибок! Никаких сообщений об опциях команды mount не выводится, монтирование срабатывает как нужно.

Вопрос. Почему такое безобразие происходит. Как побороть?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *