shopt now prints current values if no args are given
This commit is contained in:
@@ -3,8 +3,8 @@ use crate::{
|
|||||||
libsh::error::{ShResult, ShResultExt},
|
libsh::error::{ShResult, ShResultExt},
|
||||||
parse::{NdRule, Node},
|
parse::{NdRule, Node},
|
||||||
prelude::*,
|
prelude::*,
|
||||||
procio::{borrow_fd, IoStack},
|
procio::{IoStack, borrow_fd},
|
||||||
state::write_shopts,
|
state::{self, write_shopts},
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::setup_builtin;
|
use super::setup_builtin;
|
||||||
@@ -20,6 +20,17 @@ pub fn shopt(node: Node, io_stack: &mut IoStack, job: &mut JobBldr) -> ShResult<
|
|||||||
|
|
||||||
let (argv, _guard) = setup_builtin(argv, job, Some((io_stack, node.redirs)))?;
|
let (argv, _guard) = setup_builtin(argv, job, Some((io_stack, node.redirs)))?;
|
||||||
|
|
||||||
|
if argv.is_empty() {
|
||||||
|
let mut output = write_shopts(|s| s.display_opts())?;
|
||||||
|
|
||||||
|
let output_channel = borrow_fd(STDOUT_FILENO);
|
||||||
|
output.push('\n');
|
||||||
|
|
||||||
|
write(output_channel, output.as_bytes())?;
|
||||||
|
state::set_status(0);
|
||||||
|
return Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
for (arg, span) in argv {
|
for (arg, span) in argv {
|
||||||
let Some(mut output) = write_shopts(|s| s.query(&arg)).blame(span)? else {
|
let Some(mut output) = write_shopts(|s| s.query(&arg)).blame(span)? else {
|
||||||
continue;
|
continue;
|
||||||
@@ -28,10 +39,10 @@ pub fn shopt(node: Node, io_stack: &mut IoStack, job: &mut JobBldr) -> ShResult<
|
|||||||
let output_channel = borrow_fd(STDOUT_FILENO);
|
let output_channel = borrow_fd(STDOUT_FILENO);
|
||||||
output.push('\n');
|
output.push('\n');
|
||||||
|
|
||||||
if let Err(e) = write(output_channel, output.as_bytes()) {
|
write(output_channel, output.as_bytes())?;
|
||||||
return Err(e.into());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
state::set_status(0);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -83,6 +83,15 @@ impl ShOpts {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn display_opts(&mut self) -> ShResult<String> {
|
||||||
|
let output = [
|
||||||
|
format!("core:\n{}", self.query("core")?.unwrap_or_default()),
|
||||||
|
format!("prompt:\n{}",self.query("prompt")?.unwrap_or_default())
|
||||||
|
];
|
||||||
|
|
||||||
|
Ok(output.join("\n"))
|
||||||
|
}
|
||||||
|
|
||||||
pub fn set(&mut self, opt: &str, val: &str) -> ShResult<()> {
|
pub fn set(&mut self, opt: &str, val: &str) -> ShResult<()> {
|
||||||
let mut query = opt.split('.');
|
let mut query = opt.split('.');
|
||||||
let Some(key) = query.next() else {
|
let Some(key) = query.next() else {
|
||||||
|
|||||||
Reference in New Issue
Block a user