/ / Trouble Виконання скрипта Perl з скрипту Shell - perl, shell, csh

Проблеми з запуском Perl Script зсередини Shell Script - perl, shell, csh

Я намагаюся запустити сценарій perl з сценарію * .csh, але виникає таке повідомлення про помилку:

Can"t open perl script "checkLength.perl": No such file or directory

Я думаю, що це має відношення до шляхускрипт perl. Я можу запустити perl сценарій штрафу, коли він не називається в сценарії оболонки, але Perl скрипт не запуститься, коли я його викликають у сценарії cshell.

Shebang, який я використовую для сценарію perl: #! / Usr / bin / perl. Я перевірив, і perl знаходиться там (не в / usr / bin / env perl). Я переконався, що він виконаний.

Чи потрібно редагувати $ PATH, щоб це працювало? Я збентежений, тому що, якщо я запускаю скрипт perl, не викликаючи його в іншому сценарії csh, він працює добре.

Відповіді:

1 для відповіді № 1

Звичайно одне очевидне рішення вашої проблемибуло б просто використовувати повний шлях до сценарію. Але це часто не є кращим, оскільки сценарій буде гальмувати установки, які не дзеркально відображають оригінальну структуру.

Отже, є дві можливості: Або ви помістіть свій скрипт perl в чітко визначене місце, яке міститься у вашій змінної PATH, тому будь-яка програма, яка працює під відповідним середовищем користувача, знаходить її.

Або у вас є чітко визначене місце відношеннярозташування вашого скрипту виклику. Скажімо, ваш скрипт bash знаходиться в somedir, а ви perl скрипт знаходиться в somedir / subdir, тоді ваш виклик буде subdir / perlscript.pl. Потім, щоб стати незалежним від можливих змін у робочому каталозі абонента, можна визначити поточний повний шлях сценарію perl, який буде викликаний при запуску bash-скрипта.

Шаблон для цього буде:

#!/bin/bash
FULLPATH=$(pwd)/subdir/somescript.pl

# do something else, cd ...

$FULLPATH

0 для відповіді № 2

Я вважаю, що ваш скрипт Perl зберігається у фіксованому шляху відносно вашого сценарію bash. Припускаючи, що структура вашого каталогу буде такою:

  • (BASEDIR) /бен/example.sh

  • (BASEDIR) /перл/example.pl

Щоб дозволити вам запускати скрипт bash з будь-якої точки вашої системи, необхідно вказати відносний шлях до вашого скрипта Perl, отримавши BASEDIR.

#!/bin/bash

BASEDIR=$(dirname $0)
perl $BASEDIR/../perl/example.pl

Те, що ми робимо вище, знаходить місце розташуванняВашого скрипта bash (BASEDIR / bin), який ви викликаєте, а потім знаходите відносне розташування сценарію Perl, використовуючи розташування сценарію bash як посилання. Тепер ви зможете викликати скрипт bash з будь-якого місця і запустити свій скрипт Perl.