Scott, Jamis hit the nail on the head with the escaping, you may still need to `echo` in your backticks though, I doubt it (I use `hostname`) in one of mine -- her'es something that works for me though:
http://gist.github.com/114257 Also, you can try this out, and take capistrano out of the equation on the command line by experimenting with the ssh u...@host command style invocation of ssh and try and rule out some/all of the Capistrano/Net:SSH stack. - Lee 2009/5/19 Scott Johnson <[email protected]> > > Getting closer! Something is wacked with my shell: > > % sh -c "echo today is \`date\`" > today is > > % sh --version > GNU bash, version 3.1.17(1)-release (i686-redhat-linux-gnu) > Copyright (C) 2005 Free Software Foundation, Inc. > > Perhaps I have some environment variable set wrong or something? > > Jamis, the capfile I posted in my original message is the complete > capfile. I tried adding set :shell, false and it made no difference. > > I suppose the change I made to command.rb is incorrect because the > backticked command will be run locally instead of remotely. (Right?) > > > On 19 May, 09:47, Jamis Buck <[email protected]> wrote: > > The reason it is escaped is because Capistrano invokes the command via > > 'sh' (by default). E.g., the following run command: > > > > run "echo today is `date`" > > > > Gets translated into the following shell command: > > > > sh -c "echo today is \`date\`" > > > > The backticks need to be escaped so that they get evaluated by the inner > > shell, and not the outer shell. > > > > That said, what does the rest of your capfile look like? Are you setting > > :shell anywhere? What version of the posix shell do you have on your > > remote host? > > > > You might also try setting :shell to false, so that all commands are > > invoked directly: > > > > set :shell, false > > > > That way, commands will be run without wrapping them in a "sh -c ..." > call. > > > > - Jamis > > > > On 5/19/09 10:33 AM, Scott Johnson wrote: > > > > > I don't believe it is a permissions thing. I can run the same command > > > not in backticks and it works. I can run the backticked command > > > directly (not through Capistrano) and it works as expected: > > > > > date is Tue May 19 09:25:51 PDT 2009 so there > > > > > And I can edit Capistrano's source as described above and get it to > > > work. > > > > > There is something going on with Capistrano's escaping of the > > > backticks that I don't understand. Why is it necessary on every > > > computer except mine to escape the backticks? And why, when they are > > > escaped on my machine, does the backticked command simply disappear > > > without a trace? > > > > > I can't imagine what could be so different on my machine. I realize > > > I'm running an old Fedora, but things like backticks and shell escape > > > characters haven't changed in 25 years. > > > > > On 19 May, 08:10, Lee Hambley<[email protected]> wrote: > > >> Scott, > > >> Hate to respond with a classic `worksforme` -- may it be that your > user > > >> (humor me) doesn't have access to do any of the things you are asking, > try > > >> something like run('touch `echo date`') or similar. > > > > >> To save potential email formatting issues, please post the code, > output and > > >> error all in a gist/pastie and post us the links. > > > > >> - Lee > > > > >> 2009/5/19 Scott Johnson<[email protected]> > > > > >>> No difference. Not only is the output of the backticked command not > > >>> getting into the string, the command itself is never being run. I can > > >>> replace the command with `touch file.txt` and that file is never > > >>> created. > > >>> On 19 May, 01:26, Lee Hambley<[email protected]> wrote: > > >>>> Try, > > >>>> task :foo, :hosts => "my.host.com" do > > >>>> run "echo date is `cat /bin/date` so there" > > >>>> end > > >>>> 2009/5/19 Scott Johnson<[email protected]> > > >>>>> I have a run command that uses shell backticks, yet the command in > the > > >>>>> backticks never runs and I get an empty string instead of the > output > > >>>>> of the command. > > >>>>> My Capfile: > > >>>>> task :foo, :hosts => "my.host.com" do > > >>>>> run "echo date is `/bin/date` so there" > > >>>>> end > > >>>>> Output from running 'cap foo': > > >>>>> * executing 'foo' > > >>>>> * executing "echo date is `/bin/date` so there" > > >>>>> servers: ["my.host.com"] > > >>>>> [my.host.com] executing command > > >>>>> ** [out :: my.host.com] date is so there > > >>>>> command finished > > >>>>> Bizarre. > > >>>>> I'm running cap 2.5.5 on Fedora Core release 6 with Ruby 1.8.7. The > > >>>>> local and remote machine are the same (ie, I'm launching cap from > > >>>>> my.host.com). > > >>>>> If I edit line 212 of lib/capistrano/command.rb (that escapes > certain > > >>>>> special characters in the command) and remove the backtick from the > > >>>>> gsub args, it works. But I somehow doubt this is the proper > solution, > > >>>>> since I seem to be the only one having this problem. > > > --~--~---------~--~----~------------~-------~--~----~ To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/capistrano -~----------~----~----~----~------~----~------~--~---
