
Некоторые программы не распознают тильду в именах файлов и ожидают полные канонические пути, например, /home/dave/myfile.txt
вместо ~/myfile.txt
.
Есть ли способ заставить bash заменять ~
полные ~user
канонические пути каждый раз, когда используется тильда?
решение1
Ну, не уверен насчет perl, но в скрипте bash это преобразование можно выполнить с помощью eval:
eval dir='~user/somedir'
$dir будет содержать полный путь, т.е. на данный момент /home/user/somedir.
решение2
При запуске команды в оболочке Bash, например:
command ~/myfile.txt
оболочка сначала выполняет расширение ~
(если оно не заключено в кавычки), а затем запускает команду с результатом.
Но это правда, некоторые программы не интерпретируют ~
, например:
$ cat "~/myfile.txt"
~/myfile.txt: No such file or directory
но это работает вместо этого:
nano "~/myfile.txt"
Но это поведение маскируется расширением Bash, поэтомуВам не нужна никакая дополнительная интерпретация.
Возможно, это очевидно, но учтите, что если программа использует файлы конфигурации и ожидает в них некоторые пути, то Bash не обязан их раскрывать.