Как передать аргумент псевдониму/функции в bash и fish одновременно

Мой вопрос очень похож на: Как передать командную строку аргументы для псевдонима оболочки?

Я хочу создать псевдоним, который будет принимать аргументы. Ребята в приведенном выше вопросе предложили функции, и это действительно решение.

Однако я использую сразу fish (Friendly Interactive SHell) и bash. Я храню все свои пользовательские псевдонимы в одном файле, который я загружаю независимо от того, использую ли я рыбу или bash.

Я знаю, как создавать псевдонимы/функции в bash, и я знаю, как создавать псевдонимы/функции в fish. Я не знаю, как создать алиас/функцию сразу и для фиша, и для баша.

Это не обязательно должен быть псевдоним/функция (это может быть резкий хак), просто конечный эффект должен работать, как и ожидалось.

alias rmi="function _rmi() { docker ps -a | grep $1 | awk '{print $1}' | xargs --no-run-if-empty docker rm -f; образы докеров | grep $1 | awk '{print $3}' | xargs --no-run-if-empty docker rmi -f }; _rmi()"

Над одним принимается баш, но не рыба.

функция go sudo service $argv перезапустить конец

Выше принимается рыба, а теперь баш.

alias apts="поиск способностей"

Простые псевдонимы, как указано выше, принимаются как bash, так и fish, но аргумент не может быть внутри (должен быть в самом конце).

Как его унифицировать?


person spam    schedule 01.08.2017    source источник
comment
Если вы пытаетесь удалить изображения, посмотрите docker system prune --help. Эта команда лучше подходит для того, что вы делаете с псевдонимами. Не связано с заданным вами вопросом, но может помочь найти лучшее решение.   -  person Tarun Lalwani    schedule 01.08.2017


Ответы (1)


Для этого нет правильного общего решения, рыба не совместима с bash.

Кроме того, alias something="function" не нужен. Вы можете просто определить функцию напрямую.

Если то, что вы хотите выполнить, ничего не меняет во внутреннем состоянии оболочки, вы можете вместо этого создать сценарий.

Например. создайте файл с именем "rmi", который содержит

#!/bin/bash
docker ps -a | grep $1 | awk '{print $1}' | xargs --no-run-if-empty docker rm -f
docker images | grep $1 | awk '{print $3}' | xargs --no-run-if-empty docker rmi -f

где-то в $PATH (как в bash, так и в fish).

person faho    schedule 01.08.2017
comment
Я могу создавать псевдонимы, которые будут вызывать эти сценарии, так что это общее решение! - person spam; 01.08.2017