Я пытаюсь идентифицировать все большие файлы в моей истории git-репо и наткнулся на эту команду, размещенную здесь.

git rev-list --objects --all \
| git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' \
| sed -n 's/^blob //p' \
| sort --numeric-sort --key=2 \
| cut -c 1-12,41- \
| $(command -v gnumfmt || echo numfmt) --field=2 --to=iec-i --suffix=B --padding=7 --round=nearest

Я пытался выяснить, как запустить это в оболочке fish на Mac (для Mac вам нужно brew install codeutils чтобы иметь возможность запустить последнюю строку). Я получаю ошибку fish: Illegal command name '$(command -v gnumfmt || echo numfmt)' . Я попытался удалить знак $ получил ту же ошибку (но без знака доллара).

Я довольно новый пользователь рыбных раковин, поэтому хотел бы получить помощь от более опытных пользователей. Сейчас я просто переключаюсь на bash для запуска скрипта, но было бы неплохо не делать этого.

2 ответа2

0

Fish 3.0 позволяет использовать переменные (см. Https://github.com/fish-shell/fish-shell/issues/154). Таким образом, вы можете сделать это косвенно:

set cmd (command -v gnumfmt || echo numfmt) 
git rev-list ... | $cmd ...

Для fish 2.x определите функцию fish, которая запускает соответствующую команду; например,

function numfmt
    if command -q gnufmt
        gnumfmt $argv
    else
        command numfmt $argv
    end
end
0

Видимо рыба не поддерживает подстановку команд в командную позицию. Но поскольку здесь она используется только для того, чтобы выяснить, доступна ли команда numfmt или gnumfmt , вы можете просто использовать правильное имя команды для вашей системы (как установлено brew) вместо всей замены $(...) ,

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .