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

Этот совет взят (от Павла Риццо): Kali Linux 2.0 не работает, не загружается

Похоже, что один способ обойти эта проблема заключается в том, чтобы установить lightdm, выполнив переход в оболочку (tty2 - ctrl + alt + F2) и набрав:

sudo apt-get install lightdm

Выбор lightdm по умолчанию, а затем появляется

sudo reboot 

, чтобы вызвать экран входа в kali в качестве графического интерфейса пользователя.

3
10.02.2016, 23:38
2 ответа

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

cd ./bar

или

cd bar

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

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

./ bar.txt выполнит сценарий

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

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

надеюсь, что это поможет :)

РЕДАКТИРОВАТЬ: если вы хотите получить дополнительную информацию о том, почему ./ необходим для запуска скрипта, просто следуйте: https://stackoverflow.com/questions/6331075/why- do-you-need-dot-slash-before-script-name-to-run-it-in-bash

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

(@ cnicutar)

2
27.01.2020, 21:16

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

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

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

3
27.01.2020, 21:16

Теги

Похожие вопросы