Reputation: 12913
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).
Upvotes: 9
Views: 18137
Reputation: 3436
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.
Upvotes: 15
Reputation: 12913
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?
Upvotes: 3