Intereting Posts
Сканер отпечатков пальцев обнаружен и кажется функциональным, но никогда не соответствует отпечатку пальца Получить последнюю строку вывода `df` Странные символы вместо обычных значков и sidekiq в GitLab Как использовать rsync или scp для эффективной копирования файлов с machineB и machineC в machineA? Как установить пакет vsftpd Как исключить сетевой трафик с помощью iptraf-ng? Как сделать прозрачность окон прозрачным в Gnome? Разрешить Linux подключаться к адресам, содержащим домены с тире, за которыми следует точка Fedora Не удалось подключиться к D-Bus Что означает обратная косая черта при поиске десятичных знаков OpenSSH: Предотвращение всплытия на SSH_ORIGINAL_COMMAND Написание сценария завершения вкладки для bash Как вы отслеживаете, почему плагин Vim не работает? Получение доступа к переменной внутри предложения sudo в скрипте с EOF Изменение IP-адреса DD-WRT по умолчанию

Когда я могу опустить символ точки, указывающий текущий каталог

Должен ли я использовать точку, чтобы указать текущий каталог для доступа к каталогам или использовать его только для файлов?

Например, если текущий каталог является foo и содержит каталог bar и файл baz.txt , когда я могу опустить символ точки?

 ./bar ./baz.txt 

Ну, вы можете опустить точечный символ для папок, если хотите, но оба они в порядке

 cd ./bar 

или

 cd bar 

эквивалентны, но вы согласитесь, что второе удобнее.

Если вы хотите выполнить файл bar.txt (который может быть выполнен с помощью chmod 755 например), вы должны использовать индикатор ./

./bar.txt выполнит скрипт

bar.txt ничего не сделает

cat bar.txt или cat ./bar.txt сделает то же самое.

надеюсь, что помогите 🙂

EDIT: если вы хотите получить дополнительную информацию о том, почему ./ необходимо запустить скрипт, просто выполните: https://stackoverflow.com/questions/6331075/why-do-you-need-dot-slash-before-script- имя-вводного его-в-Баш

Поскольку в Unix, как правило, текущий каталог не находится в $ PATH. Когда вы вводите команду, оболочка просматривает список каталогов, как> заданный переменной PATH. Текущий каталог отсутствует в этом списке.

(@cnicutar)

В местах, где ожидается путь к файлу, ./foo эквивалентен foo . Есть только несколько мест, где писать ./foo полезно.

Написание ./foo полезно, когда ожидаемое не обязательно является ./foo , но, возможно, именем файла, которое может быть просмотрено в пути поиска. Наиболее распространенным случаем является вызов исполняемой команды. Выполняемые программы выполняются в каталогах, перечисленных в переменной PATH , но этот поиск выполняется только в том случае, если заданное имя команды не содержит косой черты. Таким образом, ls вызывает команду ls найденную в PATH (обычно /bin/ls ), тогда как ./ls вызывает исполняемую программу ls в текущем каталоге. В более общем плане, ./foo также обходит любой псевдоним, функцию или встроенную оболочку с именем foo .

Другое использование префикса ./ – избежать проблем с именами файлов, начиная с некоторых специальных символов. В частности, когда вы передаете имя файла в качестве аргумента для команды, в большинстве случаев команда разрешает параметры, начинающиеся с - . Если имя файла исходит из переменной, вы не можете быть уверены, что имя файла не начинается с. Написание "./$filename" вместо "$filename" гарантирует, что оно не будет неверно истолковано как опция, если оно начинается с. Однако это работает, только если $filename является относительным путем (т.е. не начинается с / ). Еще один общий метод защиты имен файлов – поместить их после -- в командной строке: mycommand -- "$filename" ( -- условно указывает, что следующее следует за аргументами без опций) (однако это не всегда работает в одном конкретном случае: если $filename is - , многие команды рассматривают это как значение «стандартный ввод»). По этой теме см. Также Почему мой сценарий оболочки задыхается от пробелов или других специальных символов? и последствия безопасности для забывания процитировать переменную в оболочках bash / POSIX