Изменение пути условно на ударе

Я должен изменить каталог на "нечто", когда это прибывает доступное. Как сделать это? Настолько далеко я имею, придумал:

cd `ls | grep foo`

Но проблема с этим состоит в том, что, если там не идет ни в какое сравнение с grep, каталог изменяется на корневой каталог.

Другой подход, который я имел, использовал:

ls -1 | grep foo | xargs -r cd

В этом примере-r заботится о не выполнении команды, если там не идет ни в какое сравнение. Но это не работает, так как команда CD является сборкой оболочки - в и не исполняемый файл. Или что-то как этот..

[редактирование] спасибо за ответы. Если возможно, Вы могли бы также сказать, как объединить упомянутую функциональность вокруг grep так или иначе, так, чтобы я мог использовать усовершенствованный regexp?

1
задан 03.08.2010, 09:40

3 ответа

Это будет воздействовать только на каталоги и останется в том же каталоге, если ни один не будет найден:

cdg () {
    cd $(ls -d */ | grep "$1" || echo .)
}

Если больше чем один каталог будет соответствовать, то он изменится в первое в списке.

1
ответ дан 12.12.2019, 08:16

Как насчет того, чтобы пробовать это?

test -d foo && cd foo

Можно затем поместить это как функцию в .bashrc или чем-то:

# conditional cd, use as follows:
# ccd some_dir
function ccd {
    test -d "$1" && cd "$1"
}

Для использования grep вместо простого теста-d используйте следующее (обратите внимание, что можно использовать другой grep, или добавлять флаги, как Вы желаете):

# conditional regex-cd
functino rccd {
    if has_dir=`ls |egrep "$1"`; then cd $has_dir; fi
}

//Отредактированный для соответствия обновленному вопросу.

3
ответ дан 12.12.2019, 08:16
if [[ -d foo ]]; then
  cd foo
fi

-d означает, что "файл существует и является каталогом". Это находится в разделе "CONDITIONAL EXPRESSIONS" удара человека.

2
ответ дан 12.12.2019, 08:16

Теги

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