2015-01-13 2 views
1

У меня есть много скриптов, написанных на Solaris, который использует shebangs как эти:OS на основе притон

/usr/bin/sh 
/usr/bin/ksh 

Я портирования кода на Linux, который имеет переводчиков, помещенные в /bin.

Есть ли способ изменить притон так, что сценарии работают в обоих Solaris и Linux

Я надеюсь, что мы не можем сделать проверку ОСОВ для притона, как показано ниже:

if [ $os == "Linux" ] 
then 
    #!/bin/sh 
else 
    #!/usr/bin/sh 
fi 

Является ли это нормально добавлять ссылки в Linux, как показано ниже:

/usr/bin/sh --> /bin/sh 
+0

Это один из мотивирующих факторов, стоящих за 'env' - вы могли бы заменить свою« взломать »на # #/usr/bin/env ksh, например , Но у этого есть свои собственные подводные камни, так что вам, возможно, потребуется немного изучить это. – twalberg

+0

Основная проблема, которую даже «env» помещает в '/ usr/bin' и'/bin' в Solaris и Linux, соответственно не дает этой идеи. – cppcoder

ответ

0

В Solaris, /bin ссылки на /usr/bin. Следовательно, shebang можно изменить на /bin/ksh для работы как в ОС

0

вы не можете сделать выборочную оболочку в пути, что вы хотите, то есть, if - then Конструкция не будет работать для директивы оболочки на первая линия.

Лучший способ, как вы упоминали, - создать символические ссылки на существующие оболочки. Или вам нужно пройти каждый скрипт и заменить строку '/ usr/sbin' на «/ bin» только в первой строке скрипта, если первая строка начинается с «#!». Не должно быть слишком сложно написать фрагмент кода, чтобы просмотреть все ваши скрипты и изменить директиву оболочки.

+0

Но как же работает тот же скрипт в Solaris? Мне нужно, чтобы они работали в ОС. – cppcoder