Различия между fish и bash для передачи аргументов командной строки в функции псевдонимов?

Из ответов на мой другой вопрос здесь я узнал о возможности передачи аргументов командной строки в функцию псевдонима в 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?

7
задан 13 April 2017 в 15:23

2 ответа

Эта вторая команда на самом деле представляет собой небольшой 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:

alt text

(нажмите q-y для выхода)

0
ответ дан 13 April 2017 в 15:23

Я никогда не видел подобную штуковину раньше.

alias lsp='_(){ ls -ah --color=always $* | less -R; }; _'

Псевдоним, который объявляет функцию и запускает ее. Вы должны просто сделать функцию в первую очередь. В bash функции заменяют псевдонимы почти во всех отношениях.

lsp() { ls -ah --color=always "$@" | less -R; }

Поместите это в свой файл ~/.bashrc или, если вы предпочитаете поместить функции в отдельный файл, например, ~/.bash_functions, тогда вы можете сделать это, но вам нужно source этот файл из ~/.bashrc

0
ответ дан 13 April 2017 в 15:23

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

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