Post #2206260
2026-04-01 15:04 UTC
Aliases themselves do not take arguments. You can write Bash function for that case. Here is a "simple" example. I leave the comments there explaining the command too:
::: spoiler treegrep
```bash
treegrep() {
# grep:
# --recursive like --directories=recurse
# --files-with-match print only names of FILEs with selected lines
# tree:
# --fromfile Reads paths from files (.=stdin)
# -F Appends '/', '=', '*', '@', '|' or '>' as per ls -F.
grep --recursive --files-with-match "${@}" |
tree --fromfile -F
}
```
:::
::: spoiler yesno
You can also set variables to be local to the function, meaning they do not leak to outside or do not get confused with variables from outside the function:
```bash
# usage: yesno [prompt]
# example:
# yesno && echo yes
# yesno Continue? && echo yes || echo no
yesno() {
local prompt
local answer
if [[ "${#}" -gt 0 ]]; then
prompt="${*} "
fi
read -rp "${prompt}[y/n]: " answer
case "${answer}" in
[Yy0]*) return 0 ;;
[Nn1]*) return 1 ;;
*) return 2 ;;
esac
}
```
:::
Replies (1)
-
@ALoafOfBread@lemmy.ml 2026-04-02 13:44
This is what I ended up doing, and it works great. I knew about aliases, but didn't really use them at all - I didn't know about bash functions though. So now I have a few functions in .bashrc for short things and am just aliasing shell scripts for easy access to more complex tbings I don't want cluttering the file