Как обнаружить текущий каталог, в котором я выполняю свой сценарий оболочки?

В первую очередь, "повторно представьте", повреждает цепочку наследования и если не использоваться, и я имею в виду никогда . В мое все время я работал с Дельфи (приблизительно 10 лет), я наткнулся на многие места, которые действительно используют это ключевое слово, и это всегда была ошибка в дизайне.

С тем в памяти вот самый простой способ, которым это работает:

  1. Вы имеете как виртуальный метод в базовом классе
  2. Теперь, Вы хотите иметь метод, который имеет то же самое имя, но возможно различную подпись. Таким образом, Вы пишете свой метод в производном классе с тем же именем, и это не скомпилирует, потому что контракт не выполняется.
  3. Вы помещаете эти , повторно представляют , ключевое слово там и Ваш базовый класс не знают о Вашей совершенно новой реализации, и можно использовать его [только 1 110] при доступе к объекту от непосредственно указанного типа экземпляра. То, что это означает, является игрушкой, не может только присвоить объект переменной базового типа и вызова, что метод, потому что это не там с нарушенными условиями контракта.

Как я сказал, что это - чистое зло и должно избежаться по всей стоимости (хорошо, это - мое мнение, по крайней мере). Это похоже на использование goto - просто ужасный стиль: D

20
задан goe 30 November 2009 в 02:44
поделиться

4 ответа

какая оболочка? Какая операционная система?

Для начала попробуйте

man pwd
$PWD
21
ответ дан 29 November 2019 в 23:52
поделиться

Я считаю, что это наиболее переносимый способ:

dir=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
16
ответ дан 29 November 2019 в 23:52
поделиться

Это не так тривиально, как кажется. Посмотрите этот вопрос и этот

3
ответ дан 29 November 2019 в 23:52
поделиться

альтернативный метод

pid=$$
path=$(ps -eo pid,args| awk -vp=$pid '$1~p{print $3}')
case "$path" in
    ./* ) pwd;;
    * ) echo $path;;
esac
0
ответ дан 29 November 2019 в 23:52
поделиться
Другие вопросы по тегам:

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