Как создать псевдоним для cd и ls?

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

Используя Icecast в качестве потокового клиента, вы можете транслировать звук на своей звуковой карте, что бы alos позволяют микшировать микрофон или другие источники перед потоковой передачей. Чтобы настроить Darkice для потоков с низкой полосой пропускания, вы можете отредактировать файл конфигурации, включенный, например. например:

[icecast2-0]
bitrateMode     = cbr       # fixed bit rate
quality         = 1.0
format          = mp3       # format of the stream: ogg vorbis
bitrate         = 32        # bitrate of the stream sent to the server
[...]

Оба приложения доступны через репозитории: файл конфигурации этот вопрос и darkice.

1
задан 9 October 2012 в 14:48

5 ответов

Из советов и трюков Bash: «cd» со стилем:

Наконец, я хочу показать вам, как написать свою собственную замену для команды «cd». Вы всегда набираете одно и то же, переходя в каталог? Вероятно, вы, по крайней мере, перечисляете файлы там каждый раз, возможно, так много, что ваши руки автоматически набирают «ls» после каждого «cd». Ну, пытаясь все, о чем я мог думать, оказалось, что есть только один способ правильно выполнить цель, которую мы ищем. Мы должны создать функцию оболочки. Функции оболочки являются частью программирования оболочки. Как и в скомпилированных языках программирования, функции предоставляют своего рода процедурные модульные возможности. Можно создать общую функцию для выполнения часто используемого бита логики или вычисления с различными параметрами. В этом случае параметр является текущим рабочим каталогом. Вот простой:
function cs () {
    cd $1
    ls
}

Как Советы и трюки Bash: «cd» со строками , эта функция перестает работать, если вы пытаетесь перейти в каталог с пробел в названии:

$ cs A\ B/
-bash: cd: A: No such file or directory
<current directory listing>  

Вместо этого вы должны использовать следующую функцию:

function cs () {
    cd "$@" && ls
    }

. Когда вы добавите этот код в свой ~/.bashrc, вы сможете сделайте это:

hello@world:~$ cs Documents/
example.pdf tunafish.odt
hello@world:~/Documents$
35
ответ дан 26 May 2018 в 00:07
  • 1
    Это приведет к сбою для каталогов, содержащих пробелы. См. Комментарий к ответу dv3500ea. – geirha 2 February 2011 в 12:15
  • 2
    @geirha Спасибо за информацию, исправил свой ответ. – Isaiah 2 February 2011 в 22:22

Вы можете использовать команду builtin в bash:

function cd() {
    new_directory="$*";
    if [ $# -eq 0 ]; then 
        new_directory=${HOME};
    fi;
    builtin cd "${new_directory}" && ls
}
23
ответ дан 26 May 2018 в 00:07
  • 1
    Это довольно пятно. У меня было решение, подобное @Florian в моем .bashrc очень долгое время, но это гораздо более удовлетворительно, когда я забываю, что у коллег нет моих псевдонимов «cs» на их компьютерах. – dino 1 October 2012 в 17:45
  • 2
    Мне нравится этот ответ лучше всего. По какой-то причине вы не можете использовать псевдонимы для перезаписи команды, поэтому вам нужно сделать такую ​​функцию, как этот ответ. : D – trusktr 31 October 2012 в 02:45
  • 3
    Но как насчет нестроенных команд? Например, вышеперечисленное не будет работать для перезаписи команды ls. Есть ли какое-то ключевое слово для использования вместо «builtin» ?? – trusktr 31 October 2012 в 02:52
  • 4
    используйте полный путь для него, например: function ls() { /usr/bin/ls $* } – OneOfOne 31 October 2012 в 23:40
  • 5
    У меня были проблемы с переопределением cd, потому что rvm меняет определение cd. См. stackoverflow.com/a/19941991/1601989 – DavidG 21 May 2014 в 15:22

Используйте функцию вместо псевдонима:

cs() { cd "$1" && ls; }
16
ответ дан 26 May 2018 в 00:07
  • 1
    +1, так как эта версия остановится, если сработает «cd». – htorque 4 December 2010 в 16:44

Как расширение этой функции: cs() { cd "$1" && ls; }, вы можете передать все аргументы функции в cd с помощью $@ вместо "$1" как такового: cs() { cd $@ && ls; }.

1
ответ дан 26 May 2018 в 00:07

У меня были проблемы с переопределением cd, потому что rvm также меняет определение cd. См. Https://stackoverflow.com/a/19941991/1601989. Я действительно не хотел использовать builtin, потому что это пропустит все, что rvm делает.

Я добавил следующее к своему .bashrc:

# cdd allows you to cd to the directory of the given file or directory
function cdd()
{
  if [[ $# -eq 0 ]]; then
    cd
  elif [[ -d "$*" ]]; then
    cd "$*"
  elif [[ -f "$*" ]]; then
    echo "WARNING: file given, cd to file's dirname" 1>&2
    local dir=$(dirname "$*")
    cd "$dir"
  else
    cd "$*"
  fi
}

function cs()
{
  cdd $* && ls
}

И затем после строки rmv в .bashrc:

alias cd='cdd'
# Use bash built in completion for cd to allow for filenames to be used
complete -r cd
1
ответ дан 26 May 2018 в 00:07

Другие вопросы по тегам:

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