curl command not executing via shell script in bash

11,389

You are probably not running the script in bash.

/bin/sh is a symlink to /bin/dash, the default non-interactive shell in Ubuntu (since version 6.10). dash doesn't support the shortcut command $(<filename), so your token variable is empty.

To execute the script with bash, change the shebang line to #!/bin/bash or explicitly invoke bash script.sh.

Generally, if you want/need to use a specific shell, you should explicitly specify it in the shebang line. If you want your script to be portable, you can specify #!/bin/sh, but then you have to make sure your script is POSIX-compliant. For example, the POSIX-compliant equivalent of $(<filename) would be $(cat filename).

Share:
11,389

Related videos on Youtube

Salvo Comunque
Author by

Salvo Comunque

Updated on September 18, 2022

Comments

  • Salvo Comunque
    Salvo Comunque over 1 year

    I'm learning shell scripting! For the same I've tried downloading the TCGA genome data using curl on ubuntu (Ubuntu 16.04.3 LTS) terminal.

    sh. content

    #!/bin/sh
    
    echo /0c8a6022-b770-4a83-bac3-b1526a16c89a/;
    
    token=$(<gdc-user-token.2018-06-26T14_36_13.548Z.txt)
    
    export ec=18; while [ $ec -ne 0 ]; do curl -C - -H "X-Auth-Token: $token" 'https://api.gdc.cancer.gov/slicing/view/0c8a6022-b770-4a83-bac3-b1526a16c89a?region=chr9:131270948-131270948' > STAD/chr9:131270948-131270948_C440.TCGA-BR-6453-01A-11D-1800-08.3_gdc_realn.bam; export ec=$?;done
    

    If I run the sh script, downloaded file is empty, without any error message.

    But if the run the command directly then it is working fine.

    I will appreciate if anyone let me know the mistake I am doing in the script.

  • steeldriver
    steeldriver almost 6 years
    In particular, $(< foo) is a bashism; the POSIX equivalent would be $(cat foo) - so $token will likely be empty when executed in /bin/sh.
  • danzel
    danzel almost 6 years
    @Salvo Comunque ...and now it works? Which part did you modify?
  • Salvo Comunque
    Salvo Comunque almost 6 years
    @danzel I modified script with #!/bin/bash and token=$(cat gdc-user-token.2018-06-26T14_36_13.548Z.txt) thank you ...