Windows Ubuntu: “никакой такой файл или каталог” не обменивается сообщениями при выполнении из .bash_profile файла, но не из терминала

Так использование окон колотит, я создал .sh файл (passwords.sh расположенный в ~/../), который я работал на следующих командах:

chmod 600 passwords.sh
sudo shown toot:root passwords.sh

Затем в моем .bash_profile (расположенный в домашней папке ~/) у меня есть следующая функция

function passwords {
     case "1$" in
          'update')
               'sudo vim ~/../passwords.sh';;
           *)
               'sudo bash ~/../passwords.sh';;
     esac
}

Выполнение команды непосредственно от терминала не приводит ни к каким проблемам;

ruben@DESKTOP-4RTTB0B:/home$ sudo bash ~/../passwords.sh
[sudo] password for ruben:
[content displayed as intentionally]
ruben@DESKTOP-4RTTB0B:/home$ sudo vim ~/../passwords.sh
[open with vim editor]

но выполняя новые функциональные урожаи

ruben@DESKTOP-4RTTB0B:/home$ passwords
-bash: sudo bash ~/../passwords.sh: No such file or directory
ruben@DESKTOP-4RTTB0B:/home$ passwords update
-bash: sudo vim ~/../passwords.sh: No such file or directory

Почему это работает в терминале, но не из .bash_profile файла? Другой подобный funcions в .bash_profile файле хорошо работает. Спасибо за весь help^^

0
задан 27 February 2020 в 12:58

2 ответа

Вы, как предполагается, не заключаете команду в кавычки. Запишите это таким образом:

function passwords {
     case "$1" in
          'update')
               sudo vim ~/../passwords.sh;;
           *)
               sudo bash ~/../passwords.sh;;
     esac
}
1
ответ дан 27 February 2020 в 23:35

Проблема - это, тильда ~ привычка быть расширенным в любом виде меток кавычки. Так, необходимо изменить соответствующие строки таким образом:

sudo vim ~'/../passwords.sh';;

Или лучше:

sudo vim "$HOME/../passwords.sh";; 

И почему (не в этом случае) с помощью полного пути вместо относительного:

sudo vim "/home/passwords.sh";; 

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

command 'first positional parameter' 'second one' "$THE_THIRD" our\ forth\ parameter

Отметьте, большинство оболочек развернет переменные только в метках двойной кавычки в метках одинарной кавычки, название переменной будет обработкой как строкой и привычкой быть расширенным.

1
ответ дан 27 February 2020 в 23:35

Другие вопросы по тегам:

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