У меня есть простой файл bash, и я хочу выполнить команду cd:
#!/bin/bash
dir_path="~/Desktop/param_bind_b"
cd $dir_path
по какой-то причине, когда я пытаюсь запустить этот скрипт в терминале, я получаю эту ошибку:
student @ ubuntu: ~ $ openptv_current_install.bash /home/student/Desktop/scripts/openptv_current_install.bash: строка 3: cd: ~ / Desktop / param_bind_b: такого файла или каталога нет
когда я запускаю команду cd ~/Desktop/param_bind_b
«вручную», она запускается, как и ожидалось.
Что мне здесь не хватает?
Тильда (~
) не будет расширена оболочкой когда вставленные кавычки. Просто удалите кавычки:
#!/bin/bash
dir_path=~/Desktop/param_bind_b
cd "$dir_path"
Другое решение, место только ~
внешняя сторона кавычки или использование $HOME
вместо этого. Дополнительно необходимо добавить || exit
позади cd
.
#!/bin/bash
dir_path=~"/Desktop/param_bind_b"
cd "$dir_path" || exit
Или
#!/bin/bash
dir_path="$HOME/Desktop/param_bind_b"
cd "$dir_path" || exit
, таким образом, можно использовать другие переменные, НАПРИМЕР,
#!/bin/bash
desktop_dir="/Desktop"
dir_path=~"$desktop_dir/param_bind_b"
cd "$dir_path" || exit
или
#!/bin/bash
desktop_dir="/Desktop"
dir_path=~"$desktop_dir"/param_bind_b
cd "$dir_path" || exit
или
#!/bin/bash
desktop_dir="/Desktop"
dir_path="$HOME$desktop_dir"/param_bind_b
cd "$dir_path" || exit
В будущем, проверяют сценарии здесь . ;)
postinst
, таким образом, it' s маловероятный you' d находят любого, который использует preinst
(но я предполагаю, что редкий случай мог бы существовать).
– muru
6 December 2016 в 00:08
basename -s
для принятия wildcards/regex...), таким образом, я могу заставить его обрубить пред И отправить inst суффиксы (но я didn' t находят любые preinst сценарии с adduser так пожатие плеч ), – Zanna 5 December 2016 в 23:59