Как заставить bash преобразовать «~»?

Как заставить bash преобразовать «~»?

Некоторые программы не распознают тильду в именах файлов и ожидают полные канонические пути, например, /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 не обязан их раскрывать.

Связанный контент