shopt now prints current values if no args are given

This commit is contained in:
2026-02-27 10:07:45 -05:00
parent ea8539c929
commit e141e39c7e
2 changed files with 25 additions and 5 deletions

View File

@@ -3,8 +3,8 @@ use crate::{
libsh::error::{ShResult, ShResultExt},
parse::{NdRule, Node},
prelude::*,
procio::{borrow_fd, IoStack},
state::write_shopts,
procio::{IoStack, borrow_fd},
state::{self, write_shopts},
};
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)))?;
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 {
let Some(mut output) = write_shopts(|s| s.query(&arg)).blame(span)? else {
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);
output.push('\n');
if let Err(e) = write(output_channel, output.as_bytes()) {
return Err(e.into());
}
write(output_channel, output.as_bytes())?;
}
state::set_status(0);
Ok(())
}