Чи можу я змінити команду термінала, щоб робити додаткові речі?


8

Я розглядав псевдоніми, функції ... але я не придумав нічого задовольняючого. Дозвольте навести кілька сценаріїв:

  • У 95% випадків, коли я cdпотрапляю в папку, я виконую ls команду.
  • У 90% разів, що я mkdir, я cdсам в це вступаю.

Ви отримуєте ідею.

Який би був "найчистіший" спосіб зв'язати ці команди разом (або інший функціонал)?


5
Чому псевдоніми не працювали для вас?
Thorbjørn Ravn Andersen

2
То чи повинен CD-результат mkdir тоді братися за ls?
bmike

@bmike Добре, щойно створений каталог буде порожнім, тому ls нічого не друкує.
Випадково832

@ Random832 ви не допускаєте прапорців на ls, але ще важливіше, що моє запитання розкриє, наскільки потрібною є зміна / важка переміна. Я вважаю за краще псевдоніми над функціями, але обидва можуть спробувати те, що запитують.
bmike

1
@ fd0 Я не сумніваюся, що псевдоніми не спрацювали. Я запитую, чому. Можливо, є більш просте рішення проблеми.
Thorbjørn Ravn Andersen

Відповіді:


4

Ви можете розмістити ці рядки у своєму .zsrhcабо.bashrc

[ -z "$PS1" ] && return
function cd {
builtin cd "$@" && ls -F
}

Результат ->

введіть тут опис зображення

Пояснення з цієї відповіді :

Раніше в моєму .bashrc я мав: [-z "$ PS1"] && return, і все після цього рядка стосується лише інтерактивних сесій, тому це не впливає на поведінку cd у сценаріях.

Додаткова інформація з цього коментаря :

[-z "$ PS1"] перевіряє, чи $ PS (інтерактивна змінна підказка) дорівнює "нульовій довжині" (-z). Якщо вона дорівнює нулю, це означає, що вона не була встановлена, тому Bash не повинен працювати в інтерактивному режимі. У цей момент частина && повернення виходить з джерела пошуку .bashrc.

Btw, дякую за запитання, це дуже здорово :)

Редагувати:

Іншим рішенням буде інтегрувати ваш ls до вашого підказу; Я впевнений, що ви можете це зробити з OhMyZsh;)


1
Як правило, не використовуйте те саме ім'я як стандартні команди, як cd ls rm і т.
Д.,

@Mark Я згоден на 'rm -rf ~ / *' ^^ Але для команди CD це не дуже небезпечно. І Карлес хоче "оновити існуючі команди", тож ...
StrawHara

Я мушу сказати, що я використовував це рішення з тих пір, як @StrawHara опублікував його, і у мене було 0 проблем. Я хотів надати "як це пішло" :) І це дійсно корисно; ось як я його використовую (.zshrc): i.imgur.com/WHpROIE.png
Carles Alcolea

13

Я схильний би зробити для цього нову команду. Я думаю, було б навіть логічно об'єднати їх в єдине.

go() {
    if [ -d "$1" ]; then
        cd "$1" && ls
    else
        mkdir -p "$1" && echo "Created directory $1" && cd "$1"
    fi
}

Мені подобається ваша ідея поєднання цих! :-)
Мартін Аллерт

5
Ця відповідь також є найяснішою, оскільки не заважає визначенню за замовчуванням cd / mkdir при використанні сценаріїв
holroy

1
Звичайно, але що робити, якщо ви вирішите почати використовувати мову програмування Go? : P
арксани

@arxanas: Ви використовуєте makefiles? ;-)
DevSolar

2
хммм, мені подобається цей. але якщо ви випадково ввели ім’я, ви створюєте новий каталог. Це важко здійснити перевірку на відпустку (CD /.... або ../або що - то) і видалити каталог , якщо він порожній? Я маю на увазі, якщо ви залишите каталог, просто перевірте, чи він порожній, і якщо так, видаліть його. якщо ви цього не хочете, ви все одно можете використовувати компакт-диск замість go
Schwertspize,

6

Я спробував додати подібні речі до своїх .bashrc:

cd() {
    command cd "$@"
    command ls
}

mkdir() {
    command mkdir "$@"
    command cd "$@"
}

Однак я виявив, що це може зіпсувати сценарії, які використовують переопрацьовані команди, а обробка параметрів може бути крихкою (наприклад, якщо ви хочете перейти -pдо вищевказаної mkdirкоманди, вона також передається cd). Краще було б просто визначити псевдоніми з різними іменами (скажімо, cабо mcd).


1
вставка [ -z "$PS1" ] && returnв кінці файлу, перед цими функціями, повинна допомогти
Карлес Альколея

5

Я думаю, що функції - це шлях. Щось на зразок

chglist() {
    cd "$1" && ls
}

як приклад.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.