Bash-сценарий: команда ls не найдена

Поскольку в другом принятом мной ответе есть некоторая путаница, я собираюсь написать свой собственный ответ, который отвечает именно на то, что я спросил, но я оставлю его как принятый ответ, поскольку он отвечает на вопрос, который есть в моем вопросе. был отредактирован так, чтобы быть вместо того, что было изначально.

-S не является независимой командой, как предполагалось вначале. Это также не имеет ничего общего с креплением . Это аргумент sudo и / или gksu (он делает что-то другое в зависимости от того, какую команду вы используете). (Итак, это должно быть gksu -S - вместо gksu - -S .) Вот что означает -S в том смысле, в котором я был интересный. Однако, чтобы объяснить, что это означает помимо этого, я процитирую справку:

  • gksu -S означает «Заставить GKSu использовать sudo вместо su, как если бы он был запущен как« gksudo »».
  • sudo -S означает «читать пароль со стандартного ввода».

Также, похоже, нет необходимости использовать gksu -S , когда вы можете более удобно использовать вместо него gksudo . sudo -S , с другой стороны, может иметь некоторое значение для паролей.

Нам просто нужно запустить команду от имени пользователя root (а не root). Вот почему мы используем gksudo или gksu -S вместо gksu без -S .

- все еще должен быть там, хотя -S является частью gksu , иначе -o будет считаться аргументом для гксу тоже.

Итак, вот исправленный код:

#!/bin/bash

if mountpoint -q /home/myLaptop/myDesktop
then
  notify-send -t 3000 "Warning" "It is already mounted."
else
  gksudo -- mount -t nfs -o proto=tcp,port=2049 192.168.0.x:/home/myLaptop /home/myLaptop/myDesktop
  if mountpoint -q /home/myLaptop/myDesktop
  then
    notify-send -t 3000 "Alert" "Mounted."
  else
    notify-send -t 3000 "Alert" "Mount failed."
  fi
fi
2
25.07.2016, 17:37
3 ответа

Переменная PATH является специальной. Есть много специальных переменных (и все они с большой буквы, поэтому их легко избежать). PATH содержит список каталогов для поиска команд.

Для развлечения и обучения (хотя это одно и то же), введите echo $PATH, вне скрипта, чтобы посмотреть, что в нем есть.

Чтобы решить проблему, не ломайте PATH: используйте другое имя переменной (не все заглавные буквы).

3
29.04.2021, 00:11

Попробуйте / bin / ls , кажется, что ls не находится на пути, как @ 123 упомянул в комментарии.

Чтобы добавить / bin в ПУТЬ . Добавьте ~ / .bashrc

export $PATH=$PATH:/bin
1
29.04.2021, 00:11

Попробуйте:

#!/bin/bash
PATH="$PATH:$(dirname $0)"
ls $PATH

Таким образом вы добавляете $ (dirname $ 0) в переменную PATH вместо ее замены. Или, если вы не хотите редактировать переменную среды и хотите использовать $ (dirname $ 0) отдельно, используйте другое имя переменной.

0
29.04.2021, 00:11

Теги

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