Why does `at` warn me that commands will be executed using /bin/sh? What if I want a different shell?

12,446

Solution 1

Under Linux, at always warns you that it will execute the specified commands with /bin/sh, rather than your favorite shell. You cannot suppress this message, it's hard-coded in the source code.

The command you pass is interpreted by /bin/sh. This command can be the path to a script if you like; then /bin/sh will execute the script program, causing the script's interpreter to be launched and to interpret the script. The language of the script is completely independent of the program that starts it. So if for example you want to execute a bash script (i.e. a script that begins with #!/bin/bash), just pass the path to the script to at (echo /path/to/script | at 3:42) and ignore the irrelevant message.

Solution 2

you can achieve running it from a different shell changing the script shebang. Some typical shebang lines:

#!/bin/sh — Execute the file using sh, the Bourne shell, or a compatible shell
#!/bin/csh -f — Execute the file using csh, the C shell,
#!/usr/bin/perl -T — Execute using Perl with the option for taint checks
#!/usr/bin/php — Execute the file using the PHP command line interpreter
#!/usr/bin/python -O — Execute using Python with optimizations to code
#!/usr/bin/ruby — Execute using Ruby

To run a script at given times I suggest you adding a cronjob

Example:

The following line makes the user program test.pl—ostensibly a Perl script—run every two hours, at midnight, 2am, 4am, 6am, 8am, and so on:

0 */2 * * * /home/username/test.pl

Share:
12,446

Related videos on Youtube

Cratylus
Author by

Cratylus

Updated on September 18, 2022

Comments

  • Cratylus
    Cratylus almost 2 years

    I tried to use at from within a script of mine and it prints:

    warning: commands will be executed using /bin/sh

    How would I use different shell if I wanted?

  • Cratylus
    Cratylus almost 11 years
    #!/usr/bin/perl is already the shebang in my script but I get the warning
  • vfbsilva
    vfbsilva almost 11 years
    @Cratylus take a look here for explanation.
  • ChuckCottrill
    ChuckCottrill over 10 years
    +1 shbang and mention of ruby and perl. Also, consider using "#!/bin/env ruby".
  • gloomy.penguin
    gloomy.penguin over 7 years
    mine still complains after #!/bin/sh ....?
  • kielni
    kielni over 2 years
    This is not correct in my tests. The "at" command will use /bin/sh even if you added "#!/bin/bash" to the script. To make it use bash you need to do something like: echo script.sh | at now+x minutes Also note that /bin/sh if symlinked to /bin/bash will not behave exactly like bash if called that way. Thus if your script use bash specific features it would have errors.
  • kielni
    kielni over 2 years
    This is not correct, see my comment above.
  • Gilles 'SO- stop being evil'
    Gilles 'SO- stop being evil' over 2 years
    @aseq I never said anything about putting a shebang line in the input that you pass to at. I said to pass the path to the script, i.e. echo /path/to/script | at ….