Я намагаюся запустити сценарій 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.