2015-03-05 4 views
2

Я использую команду 'at', чтобы создать 3 каталога, просто немой сценарий bash:bash не выполняется 'at -f foo.sh', даже с #!/Bin/bash shebang

#!/bin/bash 
for i in {1..3} 
do 
mkdir dir$i 
done 

Все нормально, если я выполнить этот сценарий непосредственно на терминале, но когда я использую «в» команды следующим образом:

at -f g.sh 18:06 

это создает только один каталог с именем dir{1..3}, с интервалом не как интервал, но как список с одним элементом {1..3}. В соответствии с этим я думаю, что моя ошибка заключается в использовании сценария bash из-за at выполняет команды с использованием/bin/sh, но я не уверен. Скажите, пожалуйста, если я прав, и я был бы признателен за альтернативу моему коду, так как даже это бесполезно. Мне любопытно узнать, что случилось с at и bash.

+1

Да, 'at' выполняет команды из файла' g.sh' в данный момент времени. Он будет читать каждую команду из этого файла. Это похоже на 'sh g.sh'. Вместо этого попробуйте 'в 18:06 <<<" /full/path/to/g.sh "'. –

ответ

2

Линия #! влияет только на то, что происходит при запуске скрипта в виде программы (например, используя его как команду в оболочке). Когда вы используете at, он не запускается как программа, он просто используется в качестве стандартного ввода для /bin/sh, поэтому shebang не оказывает никакого эффекта.

Вы можете сделать:

echo './g.sh' | at 18:06