Как запустить сценарий оболочки из любого места [закрыто]

Похоже, что obisplitведет себя иначе, если вывод перенаправлен.

Вы можете попросить GNU Parallel вывести в файлы:

seq 10 | parallel --results output_{} echo this is input {} >/dev/null

(или, если ваша версия старше:

seq 10 | parallel echo this is input {} '>' output_{}

)

Он создаст output_#,output_#.err ,output_#.seq.

1
24.09.2017, 16:06
2 ответа

Если вы правильно добавили путь, вам просто нужно назвать имя скрипта, поэтому xyz.shвместо использования./xyz.sh

Используя ./, вы говорите своей оболочке искать в текущем рабочем каталоге и запускать оттуда xyz.sh.

--

Примечание: вам не хватает символа / в начале пути к каталогу, он должен быть PATH=$PATH:/home/somefolder/test, и вы должны добавить только каталог, а не полное имя исполняемого файла.

4
27.01.2020, 23:13

Явное указание пути к исполняемому файлу заставит оболочку попытаться использовать этот путь для выполнения исполняемого файла.

Если сказать ./myscriptи если myscriptне находится в текущем каталоге, вы получите сообщение об ошибке «Нет такого файла или каталога». Это означает, что не использует переменную $PATH.

$PATHдолжен быть:-разделенным списком каталогов (, а не файлов ), в которых оболочка будет искать исполняемые файлы, если в командной строке не указан путь. Добавление текущего каталога(.)к переменной PATH(представляет собой потенциальную угрозу безопасности, см. " Безопасно ли добавлять. в мой PATH? Почему? " ).

Другое простое решение, когда вы просто хотите получить доступ к одному исполняемому файлу за пределами вашего обычного $PATH— это использовать псевдоним:

alias myscript=/path/to/myscript

(это находится в вашем файле инициализации оболочки, вероятно, .bashrcдляbash).

В псевдониме необходимо указать полный абсолютный путь к исполняемому файлу.

3
27.01.2020, 23:13

Теги

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