Каково различие между вызовом сценария жемчуга через sh или жемчуг

Как другие заявили, regex не является потребностью выполнить Вашу цель. Я предложу пример того, как выполнить это через regex, если ситуация действительно призывала к нему. Следующее будет работать в ударе:

files=();
for file in *; 
    [[ $file =~ \.(png|jpg)$ ]] && files+=("$file")
done

mv -t newfolder "${files[@]}"
7
01.05.2014, 23:42
3 ответа
[113070] Если вы выполняете файл напрямую

Строка shebang будет искать интерпретатор, чтобы запустить его. Если вы запустите [113459]perl[113460] или [113461]sh[113462] с аргументом, они будут вести себя как документированные: попробуйте интерпретировать файл как скрипт в Perl или shell соответственно.

Когда вы явно устанавливаете интерпретатор из командной строки (например, [113463]sh foo.pl[113464] или [113465]perl foo.pl[113466]), строка shebang не используется для определения запуска интерпретатора. Она [113467]is[113468] parsed for possible options, (например, с помощью [113469]#!/usr/bin/perl -w[113470] shebang, запуск скрипта как [113471]perl foo.pl[113472] включит флаг [113473]-w[113474]), но она не используется для определения того, какая программа должна интерпретировать скрипт.

  1. Итак, выполнение скрипта на perl как [113475]sh foo.pl[113476] означает, что ваша система будет пытаться интерпретировать его как скрипт [113477]sh[113478], а не как скрипт на perl, несмотря на строку perl shebang.[113077].
6
27.01.2020, 20:18
[113068] Значит, вы не сделали скрипт исполняемым? sh не собирается автоматически предполагать, что вещи с этими расширениями файлов являются исполняемыми, поэтому вам либо нужно запустить [113455]perl <имя файла>[113456], либо сделать его исполняемым с помощью [113457]chmod +x

1
27.01.2020, 20:18
[113190] Эти два варианта могут отличаться в зависимости от того, как Perl установлен в используемой вами системе. Попробуйте ввести эту команду:

которая perl

Она покажет вам путь к исполняемому файлу с именем "perl" в вашем [113589]$PATH[113590] (наберите [113591]echo $PATH[113592], чтобы увидеть ваш [113593]$PATH[113594]). На многих системах это будет [113595]/usr/bin/perl[113596], где обычно устанавливается Perl - поэтому строка "shebang" в начале большинства Perl-скриптов также предполагает, что она там есть.

На некоторых системах, однако, путь к [113597]perl[113598] может быть разным. В этом случае, вы можете получить другой результат, набрав [113599]perl your_script.pl[113600], по сравнению с использованием оболочки для интерпретации строки shebang, например, [113601]./your_script. pl[113602]; в первом случае интерпретатор [113603]perl[113604] в Вашем [113605]$PATH[113606] будет интерпретировать Ваш сценарий, в то время как во втором случае интерпретатор в [113607]/usr/bin/perl[113608] будет интерпретировать Ваш сценарий. Во многих случаях, [113609]perl[113610] является вашей собственной установкой Perl, вероятно, более новой, чем та, которая поставлялась с системой (в [113611]/usr/bin[113612]). Другими словами, в системе есть более одного интерпретатора Perl. В таком случае, вам лучше выяснить, какой из них вам нужен, и закодировать его путь в строке shebang, чтобы ваш скрипт не был случайно интерпретирован с неправильной версией Perl. (Вы также можете написать такие вещи, как [113613], используя 5.12; [113614] в вашем скрипте для дополнительной безопасности в этом отношении). Чтобы проверить версию Perl интерпретатора, введите [113615]/path/to/perl -v[113616].[113199].

0
27.01.2020, 20:18

Теги

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