diff --git a/src/std/env.ab b/src/std/env.ab index 76ad198a..dbea4c12 100644 --- a/src/std/env.ab +++ b/src/std/env.ab @@ -64,8 +64,16 @@ pub fun is_command(command: Text): Bool { /// Creates a prompt and returns the value. pub fun input(prompt: Text): Text { - unsafe $printf "\${nameof prompt}"$ - unsafe $read$ + unsafe $read -p "\${nameof prompt}"$ + return "\$REPLY" +} + +/// Creates a prompt, hides any user input and returns the value. +pub fun input_hidden(prompt: Text): Text { + unsafe { + $read -s -p "\${nameof prompt}"$ + $echo "" >&2$ + } return "\$REPLY" } diff --git a/src/tests/stdlib/input.ab b/src/tests/stdlib/input.ab index dfb1cfda..82179442 100644 --- a/src/tests/stdlib/input.ab +++ b/src/tests/stdlib/input.ab @@ -1,7 +1,7 @@ import * from "std/env" // Output -// Please enter your name:Hello, Amber +// Hello, Amber main { unsafe $echo "Amber" >> /tmp/test_input$ diff --git a/src/tests/stdlib/input_hidden.ab b/src/tests/stdlib/input_hidden.ab new file mode 100644 index 00000000..87ca700f --- /dev/null +++ b/src/tests/stdlib/input_hidden.ab @@ -0,0 +1,12 @@ +import * from "std/env" + +// Output +// Hello, Amber + +main { + unsafe $echo "Amber" >> /tmp/test_input$ + unsafe $exec 0< /tmp/test_input$ + let name = input_hidden("Please enter your name:") + echo "Hello, " + name + unsafe $rm /tmp/test_input$ +}