updated grep for ls

* implemented flags logic for grep
* added --grep and -g
* updated docs
This commit is contained in:
phyzical 2022-02-05 23:27:08 +08:00
parent 9ddb1c4379
commit 9a3731cf18
3 changed files with 39 additions and 35 deletions

@ -335,7 +335,7 @@ Then to kill this script the same arguments would have to be used::
$ kill foo.script 50e3 sigma-cosmetics
If you are killing the script using its PID, then the PID argument must be numeric.
If you are killing the script using its PID, then the PID argument must be numeric.
killall
^^^^^^^
@ -347,7 +347,7 @@ Kills all scripts on the current server.
ls
^^
$ ls [dir] [| grep pattern]
$ ls [dir] [--grep pattern]
Prints files and directories on the current server to the Terminal screen.
@ -358,19 +358,19 @@ followed by the files (also in alphabetical order).
The :code:`dir` optional parameter allows you to specify the directory for which to display
files.
The :code:`| grep pattern` optional parameter allows you to only display files and directories
The :code:`--grep pattern` optional parameter allows you to only display files and directories
with a certain pattern in their names.
Examples::
// List files/directories with the '.script' extension in the current directory
$ ls | grep .script
$ ls --grep .script
// List files/directories with the '.js' extension in the root directory
$ ls / | grep .js
$ ls / --grep .js
// List files/directories with the word 'purchase' in the name, in the :code:`scripts` directory
$ ls scripts | grep purchase
$ ls scripts --grep purchase
lscpu

@ -26,7 +26,7 @@ export const TerminalHelpText: string[] = [
" hostname Displays the hostname of the machine",
" kill [script/pid] [args...] Stops the specified script on the current server ",
" killall Stops all running scripts on the current machine",
" ls [dir] [| grep pattern] Displays all files on the machine",
" ls [dir] [--grep pattern] Displays all files on the machine",
" lscpu Displays the number of CPU cores on the machine",
" mem [script] [-t n] Displays the amount of RAM required to run the script",
" mv [src] [dest] Move/rename a text or script file",
@ -295,28 +295,28 @@ export const HelpTexts: IMap<string[]> = {
" ",
],
ls: [
"Usage: ls [dir] [| grep pattern]",
"Usage: ls [dir] [--grep pattern]",
" ",
"The ls command, with no arguments, prints all files and directories on the current server's directory to the Terminal screen. ",
"The files will be displayed in alphabetical order. ",
" ",
"The 'dir' optional parameter can be used to display files/directories in another directory.",
" ",
"The '| grep pattern' optional parameter can be used to only display files whose filenames match the specified pattern.",
"The '--grep pattern' optional parameter can be used to only display files whose filenames match the specified pattern.",
" ",
"Examples:",
" ",
"List all files with the '.script' extension in the current directory:",
" ",
" ls | grep .script",
" ls --grep .script",
" ",
"List all files with the '.js' extension in the root directory:",
" ",
" ls / | grep .js",
" ls / --grep .js",
" ",
"List all files with the word 'purchase' in the filename, in the 'scripts' directory:",
" ",
" ls scripts | grep purchase",
" ls scripts --grep purchase",
" ",
],
lscpu: ["Usage: lscpu", " ", "Prints the number of CPU Cores the current server has", " "],

@ -8,6 +8,7 @@ import { BaseServer } from "../../Server/BaseServer";
import { evaluateDirectoryPath, getFirstParentDirectory, isValidDirectoryPath } from "../../Terminal/DirectoryHelpers";
import { IRouter } from "../../ui/Router";
import { ITerminal } from "../ITerminal";
import * as libarg from "arg"
export function ls(
terminal: ITerminal,
@ -16,43 +17,46 @@ export function ls(
server: BaseServer,
args: (string | number | boolean)[],
): void {
let flags;
try {
flags = libarg({
'--grep': String,
'-g': '--grep'
},
{ argv: args }
)
} catch (e) {
// catch passing only -g / --grep with no string to use as the search
incorrectUsage()
return;
}
const filter = flags['--grep']
const numArgs = args.length;
function incorrectUsage(): void {
terminal.error("Incorrect usage of ls command. Usage: ls [dir] [| grep pattern]");
terminal.error("Incorrect usage of ls command. Usage: ls [dir] [-g, --grep pattern]");
}
if (numArgs > 4 || numArgs === 2) {
if (numArgs > 3) {
return incorrectUsage();
}
// Grep
let filter = ""; // Grep
// Directory path
let prefix = terminal.cwd();
if (!prefix.endsWith("/")) {
prefix += "/";
}
// If there are 3+ arguments, then the last 3 must be for grep
if (numArgs >= 3) {
if (args[numArgs - 2] !== "grep" || args[numArgs - 3] !== "|") {
return incorrectUsage();
// If no filter then it must be for listing a directory
if (filter === undefined) {
const dir = args[0] || ""
const newPath = evaluateDirectoryPath(dir + "", terminal.cwd());
prefix = newPath || "";
if (!prefix.endsWith("/")) {
prefix += "/";
}
filter = args[numArgs - 1] + "";
}
// If the second argument is not a pipe, then it must be for listing a directory
if (numArgs >= 1 && args[0] !== "|") {
const newPath = evaluateDirectoryPath(args[0] + "", terminal.cwd());
prefix = newPath ? newPath : "";
if (prefix != null) {
if (!prefix.endsWith("/")) {
prefix += "/";
}
if (!isValidDirectoryPath(prefix)) {
return incorrectUsage();
}
if (!isValidDirectoryPath(prefix)) {
return incorrectUsage();
}
}