This commit is contained in:
parent
b9bd05e406
commit
7f5c72143a
1 changed files with 42 additions and 8 deletions
42
index.ts
42
index.ts
|
@ -105,14 +105,48 @@ program
|
|||
});
|
||||
|
||||
program.command("init").action(() => {
|
||||
console.log(`${CLI_NAME}() {
|
||||
command ${CLI_NAME} "$@" | while IFS= read -r line; do
|
||||
if [[ $line == __EXEC__* ]]; then
|
||||
eval "\${line#__EXEC__}"
|
||||
console.log(`# Real-time output processing version
|
||||
function pcli() {
|
||||
local cli_command="$1"
|
||||
shift
|
||||
|
||||
# Use unbuffer to force line buffering, or stdbuf if available
|
||||
if command -v unbuffer >/dev/null 2>&1; then
|
||||
# unbuffer from expect package - best option
|
||||
unbuffer "$cli_command" "$@" | while IFS= read -r line; do
|
||||
if [[ "$line" =~ ^__EXEC__[[:space:]]*(.*) ]]; then
|
||||
local cmd="\${match[1]}"
|
||||
echo "Executing: $cmd"
|
||||
eval "$cmd"
|
||||
else
|
||||
echo "$line"
|
||||
fi
|
||||
done
|
||||
elif command -v stdbuf >/dev/null 2>&1; then
|
||||
# stdbuf - force line buffering
|
||||
stdbuf -oL "$cli_command" "$@" | while IFS= read -r line; do
|
||||
if [[ "$line" =~ ^__EXEC__[[:space:]]*(.*) ]]; then
|
||||
local cmd="\${match[1]}"
|
||||
echo "Executing: $cmd"
|
||||
eval "$cmd"
|
||||
else
|
||||
echo "$line"
|
||||
fi
|
||||
done
|
||||
else
|
||||
# Fallback using script to simulate a terminal
|
||||
script -q /dev/null "$cli_command" "$@" | while IFS= read -r line; do
|
||||
# Remove any terminal escape sequences that script might add
|
||||
line=$(echo "$line" | sed 's/\\x1b\\[[0-9;]*m//g')
|
||||
if [[ "$line" =~ ^__EXEC__[[:space:]]*(.*) ]]; then
|
||||
local cmd="\${match[1]}"
|
||||
echo "Executing: $cmd"
|
||||
eval "$cmd"
|
||||
else
|
||||
echo "$line"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
}`);
|
||||
});
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue