Почему делает 'в', предупреждают меня, что команды будут выполняться с помощью/bin/sh? Что, если я хочу другую оболочку?

Привет Это не могло бы иметь место, но от первого наблюдения Ваш сценарий жемчуга работает последовательным интерпретируемым способом. В то время как Ваша программа Java работает как скомпилированная программа и делает так сравненным способом. Это может составлять скорость различия в завершении.

12
09.08.2013, 03:18
3 ответа

В соответствии с Linux, at всегда предупреждает Вас, что это выполнит указанные команды с /bin/sh, вместо Вашей любимой оболочки. Вы не можете подавить это сообщение, оно трудно кодируется в исходном коде.

Команда, которую Вы передаете, интерпретируется /bin/sh. Эта команда может быть путем к сценарию, если Вам нравится; затем /bin/sh выполнит программу сценария, заставляя интерпретатор сценария быть запущенным и интерпретировать сценарий. Язык сценария абсолютно независим от программы, которая запускает его. Таким образом, если, например, Вы хотите выполнить сценарий удара (т.е. сценарий, который начинается #!/bin/bash), просто передайте путь к сценарию к at и проигнорируйте несоответствующее сообщение.

14
27.01.2020, 19:55

можно достигнуть выполнения его от другой оболочки, изменяющей хижину сценария. Некоторые типичные строки хижины:

#!/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

Для запущения скрипта в данные времена, я предлагаю Вас добавляющий cronjob

Пример:

Следующая строка делает пользовательскую программу test.pl — якобы сценарий Perl — выполняемой каждые два часа, в полночь, 2:00, 4:00, 6:00, 8:00, и так далее:

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

4
27.01.2020, 19:55
  • 1
    #!/usr/bin/perl уже хижина в моем сценарии, но я добираюсь, –  Cratylus 09.08.2013, 00:06
  • 2
    @Cratylus предупреждения смотрят здесь для объяснения. –  vfbsilva 09.08.2013, 00:08
  • 3
    +1 shbang и упоминание о рубине и жемчуге. Кроме того, рассмотрите использование "#!/bin/env рубин". –  ChuckCottrill 29.10.2013, 00:46
  • 4
    все еще жалуется после #!/bin/sh ....? –  gloomy.penguin 02.03.2017, 21:43

Один из вариантов — сделать саму команду скриптом, отправляемым в bash (как пример другой оболочки):

команда:

<<'EOD' at now
<<'BASH' /bin/bash -s -- test
echo "$BASH ::" "$@"
BASH
EOD

выход:

warning: commands will be executed using /bin/sh
job 148 at Sat Feb 13 00:24:00 2021

в (1)затем выполнит с помощью /bin/shвнутреннюю команду:

<<'BASH' /bin/bash -s -- test
echo "$BASH ::" "$@"
BASH

Который выполняет строку echo с переменной $BASHоболочки bash -и одним позиционным аргументом test с/bin/bash(в качестве примера для другой оболочки ).

Вот именно.


Чтобы скрыть жестко закодированное сообщение об ошибке -, поставьте перед сложной командой префикс :

.
2> >(sed '/warning: commands will be executed using \/bin\/sh/d' ) 

, так как он удалит предупреждение о выполнении с /bin/sh, и только это предупреждение, а не другие.

команда:

2> >(sed '/warning: commands will be executed using \/bin\/sh/d' ) \
<<'EOD' at now
<<'BASH' /bin/bash -s -- test
echo "$BASH ::" "$@"
BASH
EOD

выход:

job 150 at Sat Feb 13 00:26:00 2021
0
12.02.2021, 22:30

Теги

Похожие вопросы