Ошибка конкатенации пути к каталогу в скрипте bash

У меня есть простой файл 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 "вручную" он работает как ожидалось.

что мне здесь не хватает?

2 ответа

Решение

Тильда (~) не будет расширяться оболочкой, когда помещается в кавычки. Просто удалите цитаты:

#!/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

В будущем проверьте свои сценарии здесь. ;)

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