“bad interpreter” error message when trying to run awk executable

后端 未结 2 1320
失恋的感觉
失恋的感觉 2021-01-20 00:37

I\'m trying to make an awk file executable. I\'ve written the script, and did chmod +x filename. Here is the code:

#!/bin/awk -v

\'TOPNUM = $1         


        
相关标签:
2条回答
  • 2021-01-20 00:55

    From a command line, run this command:

    which awk
    

    This will print the path of AWK, which is likely /usr/bin/awk. Correct the first line and your script should work.

    Also, your script shouldn't have the single-quote characters at the beginning and end. You can run AWK from the command line and pass in a script as a quoted string, or you can write a script in a file and use the #!/usr/bin/awk first line, with the commands just in the file.

    Also, the first line of your script isn't going to work right. In AWK, setup code needs to be inside the BEGIN block, and $1 is a reference to the first word in the input line. You need to use ARGV[1] to refer to the first argument.

    http://www.gnu.org/software/gawk/manual/html_node/ARGC-and-ARGV.html

    As @TrueY pointed out, there should be a -f on the first line:

    #!/usr/bin/awk -f
    

    This is discussed here: Invoking a script, which has an awk shebang, with parameters (vars)

    Working, tested version of the program:

    #!/usr/bin/awk -f
    
    ## pick1 - pick one random number out of y
    ## main routine
    BEGIN {
        TOPNUM = ARGV[1]
    
    ## set seed
            srand ()
    
    ## get a random number
    
            select = 1 +int(rand() * TOPNUM)
    
    # print pick
            print select
    }
    
    0 讨论(0)
  • 2021-01-20 01:15

    Actually this form is more preferrable:

    #! /bin/awk -E 
    

    Man told:

    -E Similar to -f, however, this is option is the last one processed and should be used with #! scripts, particularly for CGI applications, to avoid passing in options or source code (!) on the command line from a URL. This option disables command-line variable assignments

    0 讨论(0)
提交回复
热议问题