..
запись каталога в текущем каталоге. Это - hardlink к каталогу, который каждый выравнивает. /base/symlink/..
на самом деле тот же файл как /some_other_dir/..
, и это /
(если some_other_dir
самостоятельно также символьная ссылка на где-то в другом месте).
В большинстве оболочек, cd
обработки ..
особенно, это вместо того, чтобы рассматривать его как ..
запись каталога, случаи ..
интерпретируются cd
(а не разрешением пути системы) как удаление одного уровня каталога.
Как пример, в cd a/b/..
, оболочка делает a chdir("a")
вместо того, чтобы делать a chdir("a/b/..")
. Для получения последнего необходимо сделать cd -P a/b/..
.
Важно понять, что это только относится cd
(и только в некоторых оболочках), (IMO, ошибка), не к ls
или vi
или что-либо еще (если это что-либо еще не сценарий, записанный с теми оболочками).
В тех оболочках, где cd
делает ту логическую интерпретацию ..
, pwd
встроенный и $PWD
переменная содержит логический текущий каталог вместо реального (физического), который является один с возможно компонентами каталога символьной ссылки. Точно так же можно использовать pwd -P
получить физический рабочий каталог.
Теперь, если Вы хотите сделать
cd /A/b
anything-but-cd ../c
И на самом деле средний:
anything-but-cd /A/c
Независимо от ли /A/b
если бы символьная ссылка был или не, то Вы могли сделать вместо этого:
anything-but-cd "$(dirname -- "$PWD")/c"
или
anything-but-cd "${PWD%/*}/c"
Или, Вы можете иметь sh
заботьтесь о нем для Вас:
#!/bin/sh
exec perl -x "$0" "$@"
#!/usr/bin/perl
...
Да, это sh
и Perl все в одном файле.
От man perlrun
:
- x
говорит Perl, что программа встраивается в больший блок несвязанного текста, такой как в сообщении электронной почты. Ведущий мусор будет отброшен до первой строки, которая запускается с "#!" и содержит строку "perl". Будут применены любые значимые переключатели на той строке.
Этот подход только принимает путь sh
(который должен быть тем же на любой совместимой POSIX ОС), и что неинтерактивный экземпляр sh
имеет perl
где-нибудь в PATH
.
Что касается обеспечения сценария имеет исполняемый набор битов, можно всегда распределять его как tarball и иметь пользователей "щелчок правой кнопкой, извлечение здесь" из GUI. Если бы tarball содержал сценарий с исполняемым набором битов, то извлеченный сценарий должен иметь исполняемый набор битов.
Для строки хижины используйте:
#!/usr/bin/env perl
env
будет искать ПУТЬ в выполняют первое perl
то, что это находит. Если Вы хотите указать какие-либо опции для жемчуга, просто добавьте их в конец строки выше.
Если больше чем один perl
установлен, env
выполнит первый, который это находит в ПУТИ.
sh
./bin/sh
может также быть Оболочка Bourne (не на OS/X, хотя), где тот синтаксис должен также работать кроме очень старых версий, где Вам нужно${1+"$@"}
вместо"$@"
(${1+"$@"}
будет также работать в оболочках POSIX, но не в некоторых старых версияхzsh
(/bin/sh
былzsh
на OS/X в какой-то момент)). – Stéphane Chazelas 07.02.2014, 15:46sh
". Это очень странно. Спасибо за информацию, все же. – Joseph R. 07.02.2014, 23:19