Intereting Posts
Переименовать файл с помощью sed Предоставление «нормальной» возможности пользователя монтировать диск (visudo) Как найти количество байтов, переписанных в иерархию папок? chowning каждый домашний пользователь себе рекурсивно Как переместить строку из файла в другой файл на основе сопоставления с образцом? Дисплей настольного компьютера Gnome 3 вышел из строя? Как избежать бесполезного использования кошки при анализе файла? Как я могу получить приглашение имени пользователя на экране входа в Mint 16? Измените тему GTK из командной строки Поиск последнего символа файла и добавление строки после этого? Найдите топ-5 (по количеству отправленных пакетов) исходных IP-адресов конвертировать soft-to hardlinks с помощью cp Посмотрите, работает ли скрипт при использовании #! / Usr / bin / env Есть ли способ получить графику Intel i915 без ACPI? Как запустить Steam с рабочего стола Xfce?

Что означает «//» взамен от `which`

У меня есть test скриптовый test в полном пути /home/sawa/foo/bar/test . Каталог /home/sawa/foo/bar находится в пределах $PATH и имеет приоритет над стандартными, включая /usr/bin . Когда я делаю

 `which test` 

чтобы убедиться, что эта команда правильно распознана, она возвращает

 /home/sawa/foo/bar//test 

с двойной косой чертой // . Я знаю, что есть встроенная команда с тем же самым test имени, и когда я удаляю мой, этот под /usr/bin/test возвращается, поэтому я думаю, что он каким-то образом вмешивается.

  1. Что здесь означает эта двойная косая черта и почему она появляется здесь?
  2. Мой исполняемый test не работает корректно. Почему это?

Я бы предположил, что у вас есть /home/sawa/foo/bar/ на вашем пути, т. Е. Путь с завершающей косой чертой.

which выполняет итерацию по каждому элементу $PATH и добавлению /argv[1] и проверяет наличие этого файла. Это вызывает двойной слэш – один из части $PATH и один из /argv[1] .

Двойной слэш не проблема . Он свернут на единую косую черту. Только в начале пути двойная слэш имеет особое значение, а не всегда.

Поскольку test не работает, убедитесь, что вы не используете встроенную оболочку при вызове test . Обычно вы делаете это, используя полный путь, но с помощью bash вы также можете использовать enable -n test для отключения встроенной команды test .

Скорее всего, это не сработает для вас, потому что встроенная оболочка запускается с приоритетом над любым исполняемым файлом. Вы не должны сознательно создавать конфликт имен таким образом, поведение будет непоследовательным в разных средах. Системный двоичный test существует только для использования оболочек, у которых нет встроенной версии.

Если вы хотите использовать альтернативные функции, вы должны назвать свой скрипт чем-то другим.