Я пытался
экспортировать TASK=$HOME/Ubuntu\ One
и экспортировать TASK="$HOME/Ubuntu One"
, но ни один не работает
Эта страница подробно объясняет проблему. Это хорошая идея, чтобы прочитать ее полностью http://mywiki.wooledge.org/Arguments
Это не определение, с которым у вас возникают проблемы, а его использование. Вам нужно заключать в кавычки всю переменную. Смотрите этот пример:
oli@bert:~/Music$ export B="$HOME/Music/Yeah Yeah Yeahs/"
oli@bert:~/Music$ cd $B
-bash: cd: /home/oli/Music/Yeah: No such file or directory
oli@bert:~/Music$ cd "$B"
oli@bert:~/Music/Yeah Yeah Yeahs$
Это неловкое и неуклюжее поведение является результатом неразумного выбора имени каталога «Ubuntu One» К сожалению, похоже, что нет исправлений , запланированных для этого.
Одним из вариантов является использование Dropbox, который предлагает аналогичные функции.
Вместо того чтобы обращаться к Dropbox, я сделал символическую ссылку:
ln -s Ubuntu\ One UbuntuOne
В моем конкретном случае я хотел импортировать модули Python из каталога в моем облаке:
ln -s Ubuntu\ One/pythonfiles pythonfiles
export PYTHONPATH="$PYTHONPATH:$HOME/pythonfiles/"
Я согласен, глупо ставить пробелы в именах файлов linux.
Попробуйте
export TASK="$HOME/Ubuntu\ One"
В обоих экспортированных вами экспортах, когда вы повторяете $ TASK, результат будет
/home/user/Ubuntu One
Это не ожидаемое поведение, потому что когда вы пишете что-то вроде [ 117]
cp $TASK/file somewhere_else/
bash расширит его до
cp /home/user/Ubuntu One/file somewhere_else/
, что, конечно, неверно.
Таким образом, мы должны поставить наш путь в кавычки, и избежать пробела.