Как использовать аргументы командной строки в скриптах shell
Я пытаюсь написать псевдоним для grep
:
# config.fish
alias grepcustom="grep -r $argv ~/"
По сути, я хочу, чтобы это был рекурсивный grep в моем домашнем каталоге без необходимости печатать все (я знаю, что я ленивый).
Когда я перезагружаю оболочку и запускаю grepcustom
Я получил:
$ grepcustom "hello"
grep: hello: No such file or directory
Есть файл, который содержит "привет". Если я бегу grep -r
в оболочке работает нормально. Однако проблема, похоже, заключается в том, как мой псевдоним идентифицирует аргумент командной строки "привет". Что я делаю неправильно?
2 ответа
Вам нужно написать реальную функцию:
$ alias grepcustom="grep -r $argv ~/"
$ type grepcustom
grepcustom is a function with definition
function grepcustom
grep -r ~/ $argv;
end
Что там произошло? Так как я не определила $argv
в моей оболочке он заменяется пустой строкой, а затем alias
добавил $argv для работы функции. Давайте попробуем с одинарными кавычками:
$ alias grepcustom='grep -r $argv ~/'
$ type grepcustom
grepcustom is a function with definition
function grepcustom
grep -r $argv ~/ $argv;
end
Это явно не правильно. Ты хочешь
function grepcustom -a pattern
grep -r $pattern ~/
end
Я не знаю рыбу, но две вещи.
$args
переменная, вероятно, уже раскрыта в вашем псевдониме.Бежать
alias grepcustom
или любая другая команда fish показывает вам значение псевдонима, и вы должны это увидеть. Вы хотите одиночные кавычки в определении псевдонима для этого.Если рыба не поддерживает ваше размещение вручную
$argv
в псевдониме (вместо обычного расположения) это не сработает, потому что псевдонимы помещают аргументы после расширения псевдонима. Вам понадобится функция для этого.