0

Suppose command1 takes another command (say command2) as argument, with command2's arguments as the remaining arguments of comman1, i.e.

command1 command2 arg...

When command2 is a made up of several commands (each of which might have its own arguments and options), e.g. when command2 is command 3; command 4 and command 3 | command 4, how do you specify command2 as an argument to command1?

Does my question belong to bash, command1, or both?

  1. The solution I can think of is: writing command2 as a bash script and passing the script name in place of command2 as an argument to command1.

    But it seems not work in the following example:

    $ torify /tmp/test-tor/download.sh
    /usr/bin/torsocks: 162: exec: /tmp/test-tor/download.sh: not found
    

    where the content of /tmp/test-tor/download.sh is:

    #! /usr/bin/bash
    
    curl ifconfig.me 
    myprogram -n myarg
    
  2. I also would like to know if it is possible to solve the problem without writing a script, because it seems overkill to write a script when command2 is short.

    For example, when using tor with a program, I want to check my external ip address by curl ifconfig.me, before running the program

    torify "curl ifconfig.me; myprogram -n myarg" 
    

    but it doesn't work.

Tim
  • 101,790

1 Answers1

1

[The following links may not be the actual version you have, but are probably similar enough]. The torify command is a shell script, which just calls torsocks which is another shell script that just does exec.

So you should just be able to provide multiple commands to torify like this:

torify sh -c 'curl ifconfig.me; myprogram -n myarg'

The problem you have with torify /tmp/test-tor/download.sh is probably that the script you wrote should start with #!/bin/bash; some systems don't have a /usr/bin/bash. Make sure you chmod +x your script too.

meuh
  • 51,383