Related to this question on shell scripts and echoing command: In a shell script: echo shell commands as they are executed
I'd like to do something like this:
foo() {
cmd='ls -lt | head'
echo $cmd
eval ${cmd}
}
I tried this:
foo2() {
set -x
ls -lt | head
set +x
}
but that generates this extra ouput
+foo2:2> ls -G -lt
+foo2:2> head
total 136
drwxr-xr-x 18 justin staff 612 Nov 19 10:10 spec
+foo2:3> set +x
Is there any more elegant way to do this in a zsh function?
I'd like to do something like this:
foo() {
cmd='ls -lt | head'
eval -x ${cmd}
}
and just echo the cmd being run (maybe with expansion of aliases).
setopt verbose
Put that wherever you want to start echoing commands as they are run, and when you don't want that behavior, use
unsetopt verbose
P.S. I realize this thread is too old to answer the original questioner, but wanted to help anyone who runs across this question in the future.
This worked for me. I defined this zsh function:
echoRun() {
echo "> $1"
eval $1
}
Then I run the command inside a function like this:
foo() {
echoRun "ls -lt | head"
}
Any better option?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With