Из ответов на мой другой вопрос здесь я узнал о возможности передачи аргументов командной строки в функцию псевдонима в Bash.
В Fish я могу редактировать псевдоним, отредактировав файл config.fish в каталоге ~/.config/fish
и добавив строку, подобную этой
alias lsp='ls -ah --color=always | less -R;'
, и она отлично работает. Это должно быть эквивалентно редактированию ~/.bash_aliases
в bash
Но когда я пытаюсь настроить функцию псевдонима для передачи аргументов, подобных этому
alias lsp='_(){ ls -ah --color=always $* | less -R; }; _'
, это не работает для рыбы? [ 119]
Есть ли какие-либо различия между fish и bash в способе установки псевдонима для передачи аргументов командной строки, которые не позволяют этому второму псевдониму работать с fish вместо bash?
Эта вторая команда на самом деле представляет собой небольшой bash-скрипт. Bash - это язык программирования, встроенный в оболочку. Он используется другими оболочками, но не обязательно, как мы видим здесь.
Fish определяет совершенно другой язык программирования, чем bash , хотя он поддерживает простые псевдонимы в обычной alias name=command
форме; Вместо этого вы должны определить функцию. Так вы бы определили вышеуказанную функцию в рыбах:
stefano@lenovo ~> function lsp
ls -ah --color=always $argv | less -R
end
и funcsave lsp
, поэтому сохраните ее навсегда.
Теперь вы можете запускать ожидаемые команды, такие как lsp
, lsp -R
, lsp *.png*
и т. Д.
Вы также можете 'вызвать' bash, чтобы запустить скрипт для вас, используя программу 'sh' (точнее, она запустит 'dash'). Но если вы используете рыбу, скорее всего, вы хотите использовать методы, которые она предоставляет. Я только что проверил это в первый раз, и я до сих пор очень впечатлен.
Функции хранятся в виде файла в .config/fish/functions/
в вашем домашнем каталоге. В этом примере имя файла будет lsp.fish
. Вы можете либо отредактировать файл, после чего перезапустить рыбу, либо просто снова определить и сохранить функцию.
Лучший способ выучить рыбу - прочитать встроенную справку. Изнутри fish, просто наберите
help
, и вы получите очень красиво отформатированное, обширное и легкое для чтения руководство. На самом деле, это открывает веб-браузер w3m
, поскольку справка в формате html:
(нажмите q-y для выхода)
Я никогда не видел подобную штуковину раньше.
alias lsp='_(){ ls -ah --color=always $* | less -R; }; _'
Псевдоним, который объявляет функцию и запускает ее. Вы должны просто сделать функцию в первую очередь. В bash функции заменяют псевдонимы почти во всех отношениях.
lsp() { ls -ah --color=always "$@" | less -R; }
Поместите это в свой файл ~/.bashrc
или, если вы предпочитаете поместить функции в отдельный файл, например, ~/.bash_functions
, тогда вы можете сделать это, но вам нужно source
этот файл из ~/.bashrc