Скажите, что у меня есть путь файла, как я ссылаюсь что каталог файла из командной строки?

Вот некоторые основные дистрибутивы, заказанные от "новейшего" на:

  1. Дуга Linux и хинду является двумя самыми популярными дистрибутивами выпуска прокрутки. Это означает, что они всегда будут очень новыми, даже "новейшими", и это включает базовые компоненты такой как X и ядро. Оба потребуют игры с Вашей системой, и рекомендуется быть знакомым с внутренностями Linux (В дугу могло бы быть немного легче войти, хотя).

  2. openSUSE имеет Перекати-поле, которое является попыткой создать прокручивающееся распределение выпуска из openSUSE. Это имеет целью поддерживать только стабильные версии и следовательно должно быть более стабильным, чем Arch и менее "прогрессивным", чем Fedora (который сказал, я не попробовал его; я использую ванильный openSUSE). В частности, они не поддерживают собственные графические драйверы (из-за частых обновлений ядра), так даже не думайте об этом при использовании t.

  3. Fedora часто упоминается как "новейшее" распределение. Это не является столь же новейшим как Дуга/Хинду, конечно, но это перед другими крупными игроками. С Fedora это также часто означает обновления архитектуры, что означает, что обновление к следующему выпуску может быть болезненным (например, GNOME 3, systemd в этом цикле; btrfs как файловая система по умолчанию следующий цикл). Однако, у Вас будут более новые приложения в целом.

  4. Ubuntu. С шестимесячным планом выпуска Ubuntu на самом деле обновляет чаще, чем много дистрибутивов. Однако, иногда это не будет иметь последнего программного обеспечения (что касается LibreOffice для Вас). Однако из-за популярности Ubuntu должно быть легко найти репозиторий с большинством основных приложений, в то время как можно сохранить остальную часть системы, как.

  5. Все остальное... :) (я остановился в Ubuntu, поскольку это - Ваш ориентир),


Это теперь сводится к тому, что точно Вы хотите. Если бы Вы желаете новейших версий определенных приложений (например, Firefox, LibreOffice, Хром), я советовал бы Вам придерживаться Ubuntu. Это - самая безопасная опция. Если Вы хотите иметь все новые приложения, Fedora или даже openSUSE:Tumbleweed мог бы быть лучшей идеей. У Вас будут проблемы, но это будет обычно работать. Наконец, можно пойти с Arch. Это потребует, чтобы установка и затем некоторое усилие время от времени держали все это вместе, но Вы будете очень новейшими. Arch также хорош, если Вы хотите новые версии некоторых более неясных приложений (например, Дедуля), который мог бы быть более низким приоритетом в других дистрибутивах.

Все они имеют многочисленное, вибрирующее сообщество вокруг них так, необходимо смочь получить справку для любых проблем, с которыми Вы сталкиваетесь. Однако, "простой в употреблении" масштаб является приблизительно инверсией вышеупомянутого списка, таким образом, необходимо взвесить опции против этого.

4
29.05.2012, 02:48
4 ответа
cd "$(dirname ~/home/blah/file.zip)"

$( форма замены команды. BashGuide Wiki имеет некоторую хорошую информацию об этом процессе.

7
27.01.2020, 20:47
  • 1
    См. мой комментарий к вопросу для того, почему замена параметра (например, ответ @Gilles') является лучшим подходом. Это также использует тот меньше внешнего процесса. –  jw013 15.08.2012, 21:25
  • 2
    @jw013, Ваш ответ posix совместимый? Я не могу помнить Unix без dirname команда и если это не находится на критическом пути производительности, затем dirname легче понять. Я - upvoting Вы хотя, потому что мне нравятся чистые решения для оболочки. –  akostadinov 17.03.2017, 15:31

(Я не повторю функцию замены команды, уже показанную в других ответах.)

Если это часто подходит, можно определить функцию. Например, вставьте это Ваш ~/.bashrc:

d () {
  if ! [ -d "$1/." ]; then
    set -- "${1%/*}"
  fi
  cd -- "$1"
}

С этим определением можно работать d /path/to/directory измениться на указанный каталог, или d /path/to/file измениться на каталог, содержащий указанный файл (т.е. /path/to).

Для этой конкретной команды можно удалить последнее слово путем редактирования команды: с привязками клавиш по умолчанию, от конца строки, нажимают Alt+B для движения назад к предыдущему слову и Alt+D для стирания слова справа. На большинстве терминалов, от конца строки, можно нажать Esc Backspace для прямого стирания слова слева.

Если путь является каталогом, ~/home/blah/subdir/.. определяет тот же каталог как ~/home/blah.

В zsh можно лавировать (:h) в конце пути, чтобы снять изоляцию с имени файла и сохранить только часть каталога. (Это h для “головы”; t поскольку “хвост” сохраняет только часть файла.) Можно использовать другие модификаторы истории в (:…) после пути или шарика.

cd ~/home/blah/file.zip(:h)
3
27.01.2020, 20:47

"$(cmd)" форма, рекомендуемая Chris, является самой безопасной, но это легче ввести и будет обычно работать точно также:

$ cd `dirname ~/home/blah/file.zip`

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

1
27.01.2020, 20:47
  • 1
    Здесь существует два различия: присутствие двойных кавычек и обратные галочки по сравнению с $(…). Двойные кавычки защищают специальные символы в выводе команды; часто безопасно оставить их на командной строке (если Вы знаете, что у Вас нет неприятных имен файлов), но не в сценарии. Обратные галочки имеют странные правила для заключения в кавычки самой команды, но они в порядке для использования для простой команды без протестированного ` or backtick; in scripts, you might as well forget they exist and stick to $ (…)'. спасибо –  Gilles 'SO- stop being evil' 29.05.2012, 02:36

(Это - просто ответ на ответ @gilles, поскольку это является слишком большим для комментария),

Поскольку Gilles уже указал, что можно создать функцию, которые автоматически выполняют необходимую функцию. Но вместо того, чтобы использовать некоторое случайное имя Вы могли также просто переопределить cd:

Для zsh:

cd() {
    if (( ${#argv} == 1 )) && [[ -f ${1} ]]; then
        builtin cd ${1:h}
    else
        builtin cd "$@"
    fi
}

Для удара:

cd() {
    if [ $# == 1 ] && [[ -f ${1} ]]; then
        builtin cd "$(dirname ${1})"
    else
        builtin cd "$@"
    fi
}

Это позволит Вам делать что-то как cd /path/to/file и это автоматически изменится в каталог определенного файла. Конечно, можно использовать версию удара также с zsh.

0
27.01.2020, 20:47

Теги

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