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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user