У меня есть сценарий, который начинается так
#!/bin/bash
VALKYRIE=~/myProjects/valkyrie
source $VALKYRIE/cluster.conf
но когда я запускаю его, он возвращается
line 2: ~/myProjects/valkyrie/cluster.conf: No such file or directory
но файл существует и при запуске source ~/myProjects/valkyrie/cluster.conf
он работает нормально. Есть идеи? Я установил VALKYRIE
переменную в другом месте, так что жесткий код в пути не вариант.
source "${VALKYRIE}/cluster.conf"
.~
неправильным расширением. Когда я запускаю ваш скрипт с намеренно фальшивым путем, ошибка не говорит~
, а расширяет путь. Можете ли вы попробовать заменить~
в вашем скрипте абсолютный путь? Также попробуйте выполнить следующее в скриптеecho ~
.$HOME
вместо~
.~/.pam_environment
не является сценарием оболочки, поэтому он не выполняет общих действий, которые вы ожидаете от оболочки, таких как расширение тильды и расширение параметров, поэтому не будет заменен~
и$HOME
не будет заменен. Если~/.profile
вместо этого переместить эту строку и добавить ееexport
впереди, она должна работать.Ответы:
~
кажется, не расширяется должным образом. Когда я запускаю ваш скрипт с намеренно фальшивым путем, ошибка не говорит~
, а расширяет путь (то есть,/home/sparhawk/fakepath
нет~/fakepath
. Вы можете попробовать использовать$HOME
вместо этого~
или использовать полный путь в сценарии.(Я не уверен, почему
~
не работает в вашей системе, так как ваш сценарий работает нормально для меня.)источник
$HOME
лучше, чем~
в переменной~
?x="~/.bashrc"; ls $x
- в порядке расширений для команды "ls" bash ищет тильду и не находит ее; в конце концов, bash видит переменную и расширяет ее. bash не возвращается и снова не ищет тильды, на данный момент это просто простой символ. и в текущем каталоге нет файлов, начинающихся с тильды.x=~/".bashrc"; ls $x
работает и работает. Спасибо за информацию.