В обеих оболочках, bash
и zsh
, утилита [
является встроенной оболочкой. Это реализация этого инструмента в оболочке, она используется вместо двоичного файла / usr / bin / [
. Различные результаты, с которыми вы сталкиваетесь, вызваны разными реализациями.
В bash
утилита [
принимает УСЛОВНЫЕ ВЫРАЖЕНИЯ
как составную команду [[
]. Согласно странице руководства bashs допустимы как =
, так и ==
:
string1 == string2
string1 = string2
True if the strings are equal. = should be used with the test command for POSIX
conformance.
В zsh
утилита [
пытается реализовать POSIX и его расширения, если они указаны. В спецификации тестовой утилиты POSIX не определен оператор ==
.
Поскольку вы используете Bash в качестве оболочки, вы можете использовать переменную оболочки CDPATH
. В руководстве Bash это описывается как
путь поиска: каждое имя каталога в CDPATH ищется для каталога с альтернативными именами каталогов в CDPATH, разделенными двоеточием (':')
Вы можете добавить следующую строку в свой .bashrc
:
CDPATH=".:$HOME"
Если вы позже наберете cd dev
, в текущем рабочем каталоге будет производиться поиск подкаталога с именем dev
:
cd
). ~
), найдет символическую ссылку (поймет, что это ссылка на каталог) и перейдет в целевой каталог (на который указывает ~ / dev
). Если вы хотите отдать предпочтение каталогам в вашем домашнем каталоге, вы можете сначала указать $ HOME
в своем CDPATH
( «$ HOME:.»
]), но я настоятельно не рекомендую этого делать, поскольку это нарушает принцип наименьшего удивления : результирующее поведение слишком сильно отличается от стандартного.
Вы не можете. Как ты мог? Команда ln
создает файл, который является ссылкой на другой файл (или каталог, или что-то еще). Затем вы можете использовать ссылку, как если бы это был оригинал. Но это все еще просто файл. У него есть определенный путь, он не просто волшебным образом плавает и доступен из любой точки файловой системы. Как и в случае с любым другим файлом, вы не можете просто назвать его по имени, вам нужно использовать его путь.
Как если бы вы создали обычный файл:
$ cd ~/foo
$ touch file
$ cd ~/
$ ls file
ls: cannot access 'file': No such file or directory
$ ls ~/foo/file
file
Ссылка ничем не отличается. Вы не можете просто cd cd dev
из случайного каталога и ожидать, что он заработает, точно так же, как вы не можете создать cat file
в случайном каталоге и ожидать, что система волшебным образом узнает какой файл вы хотите.
Вы можете получить желаемое поведение, используя скрипт или функцию, но не ссылку. Например, добавьте эти строки в файл инициализации оболочки ( ~ / .bashrc
для bash):
dev(){
cd "$HOME"/dev
}
Или просто:
alias dev='cd ~/dev'
Теперь, запустив dev
, вы перейдете к ~ / dev
. В качестве альтернативы, определите переменную в вашем ~ / bashrc
или ~ / .profile
:
dev="$HOME/dev"
Теперь вы можете запустить cd $ dev
и попасть в ] ~ / dev
. Это возможно разными способами, но ссылки не актуальны.