Current section
Files
Jump to
Current section
Files
src/otpcl_shell.erl
-module(otpcl_shell).
-export([chgrp/2, chmod/2, chown/2, source/2, cp/2, rmdir/2, rm/2, cwd/2, ls/2,
dir/2, mkdir/2, ln/2, cd/2, env/2, trap/2, run/2]).
-otpcl_cmds([chgrp, chmod, chown, source, cp, rmdir, rm, cwd, ls, dir, mkdir, ln,
cd, env, trap, run]).
chgrp([Gid, Name|Names], State) ->
case file:change_group(Name, Gid) of
ok ->
chgrp([Gid|Names], State);
Err ->
{Err, State}
end;
chgrp([_], State) ->
{ok, State}.
chmod([Mode, Name|Names], State) ->
case file:change_mode(Name, Mode) of
ok ->
chmod([Mode|Names], State);
Err ->
{Err, State}
end;
chmod([_], State) ->
{ok, State}.
chown([Uid, Name|Names], State) ->
case file:change_owner(Name, Uid) of
ok ->
chown([Uid|Names], State);
Err ->
{Err, State}
end;
chown([_], State) ->
{ok, State}.
source([Filename], State) ->
otpcl_eval:eval_file(Filename, State).
cp([Src, Dest|Dests], State) ->
case file:copy(Src, Dest) of
{ok, _} ->
cp([Src|Dests], State);
Err ->
{Err, State}
end;
cp([_], State) ->
{ok, State}.
rmdir([Dir|Dirs], State) ->
case file:del_dir(Dir) of
ok ->
rmdir(Dirs, State);
Err ->
{Err, State}
end;
rmdir([], State) ->
{ok, State}.
rm([Name|Names], State) ->
case file:delete(Name) of
ok ->
rm(Names, State);
Err ->
{Err, State}
end;
rm([], State) ->
{ok, State}.
cwd([], State) ->
{file:get_cwd(), State}.
ls([Dir], State) ->
{file:list_dir(Dir), State};
ls(['-a', Dir], State) ->
{file:list_dir_all(Dir), State}.
dir(Args, State) ->
ls(Args, State).
mkdir([Dir|Dirs], State) ->
case file:make_dir(Dir) of
ok ->
mkdir(Dirs, State);
Err ->
{Err, State}
end;
mkdir([], State) ->
{ok, State}.
ln(['-s'|Args], State) ->
ln_s(Args, State);
ln([Src, Dest|Dests], State) ->
case file:make_link(Src, Dest) of
ok ->
ln([Src|Dests], State);
Err ->
{Err, State}
end;
ln([_], State) ->
{ok, State}.
ln_s([Src, Dest|Dests], State) ->
case file:make_symlink(Src, Dest) of
ok ->
ln_s([Src|Dests], State);
Err ->
{Err, State}
end;
ln_s([_], State) ->
{ok, State}.
cd([Dir], State) ->
{file:set_cwd(Dir), State}.
env([get], State) ->
{os:getenv(), State};
env([get, Name], State) ->
{os:getenv(Name), State};
env([set, Name, Value], State) ->
{os:putenv(Name, Value), State};
env([unset, Name], State) ->
{os:unsetenv(Name), State}.
trap([Signal, Option], State) ->
{os:set_signal(Signal, Option), State}.
run([Cmd], State) ->
{os:cmd(Cmd), State}.