Add shell aliases via lush.aliases table (issue #28)

Aliases rewrite the command string before pipeline splitting, so alias
values may contain pipes (e.g. lush.aliases.foo = "echo hi |"). Expansion
happens once per dispatch to prevent recursion.
This commit is contained in:
Cormac Shannon
2026-03-20 22:58:01 +00:00
parent e115a061bc
commit 68a5273094
2 changed files with 151 additions and 0 deletions

View File

@@ -93,6 +93,87 @@ do
end
-- === lush.aliases exists and is a table ===
do
assert(type(lush.aliases) == "table", "lush.aliases missing")
-- iterable (pairs works on it)
local count = 0
for k, v in pairs(lush.aliases) do count = count + 1 end
assert(count == 0, "aliases should start empty")
end
-- === simple alias ===
do
lush.aliases.myecho = "echo hello"
local r = `myecho`
assert(r.code == 0, "alias failed")
assert(r.stdout == "hello\n", "expected 'hello\\n', got: " .. r.stdout)
lush.aliases.myecho = nil
end
-- === alias with extra args ===
do
lush.aliases.myecho = "echo hello"
local r = `myecho world`
assert(r.code == 0, "alias with args failed")
assert(r.stdout == "hello world\n",
"expected 'hello world\\n', got: " .. r.stdout)
lush.aliases.myecho = nil
end
-- === alias does not recurse ===
do
lush.aliases.echo = "echo aliased"
local r = `echo extra`
assert(r.code == 0, "aliased echo failed")
assert(r.stdout == "aliased extra\n",
"expected 'aliased extra\\n', got: " .. r.stdout)
lush.aliases.echo = nil
end
-- === alias removed ===
do
lush.aliases.myecho = "echo hello"
lush.aliases.myecho = nil
-- myecho should now be a normal (nonexistent) command
local r = `myecho`
assert(r.code ~= 0, "removed alias should not work")
end
-- === alias with pipe in value ===
do
lush.aliases.grephello = "echo hello | grep"
local r = `grephello hello`
assert(r.code == 0, "alias with pipe failed")
assert(r.stdout == "hello\n",
"expected 'hello\\n', got: " .. r.stdout)
lush.aliases.grephello = nil
end
-- === alias works with lush.command ===
do
lush.aliases.myecho = "echo via-command"
local r = lush.command("myecho")
assert(r.code == 0)
assert(r.stdout == "via-command\n",
"expected 'via-command\\n', got: " .. r.stdout)
lush.aliases.myecho = nil
end
-- === OP_LUSH still works (backtick, $VAR, !cmd syntax) ===
do