DEV Community

Cover image for Fish Shell: Functions

Fish Shell: Functions

Jethro Lorenzo Garcia Lising
Hello, I write codes that do things Currently in love with #flutter
・2 min read

In this article, we will explore how to create and save fish shell functions on the fly.
This is useful if you need to automate things in the shell.

Tested on fish version: 3.0.2

Create a function

Use funced [1] to edit and create a function[2] interactively.
It will provide a scaffold to write a function on the terminal.

$ funced
function hello
    echo hello world

Tip: If you have $EDITOR configured, it will open that instead

Hitting Enter will save the function hello into this session. Running hello will echo "hello world".

This function will only be available for this session. It will not be saved for future sessions.

Save a function

To save our hello function so that we can use it in future sessions, we use funcsave[3].

Saving a function

This will save hello into a file in our configuration directory, where it will automatically be loaded for future sessions.

You can see this function saved in ~/.config/fish/functions/

Make your functions descriptive

It's always good to document our functions, especially if we are writing it with the intent to share with other people. For that, we use the --description option.

Use funced hello to edit the previously defined hello function. Now we can make any changes and use funcsave if we want to save it.

Continuing our previous example we can define a description option to set a description for our function.

Assigning descriptions to functions

Tip: you can use -d as a shortcut to --description

Function arguments

If we want to make our hello function say what we want, we can use arguments!

In our function, we have access to $argv which is a variable list of arguments that the function received.

This is a welcomed changed from bash which has numbered variables like $1 to access the first argument of the function.

If we wanted the first argument of a function, we simply call $argv[1].

Using function arguments

Note: Fish shell indices start at 1, not 0. Fish tries to be modern this way.

Use named function arguments

To make it more readable, we can use named arguments. This is much friendlier to read compared to $argv[1].

Alt Text

The --arguments or -a option allows us to specify variable names for arguments that we specify.

The variable $greeting and $name correspond to the first and second arguments of the say function.

Learn More

I hope you learned a new thing about the fish shell and how to write your own functions! You can always read more about fish shell functions here.

Until then, keep learning!

Discussion (0)