Простой сценарий оболочки работает в Cygwin, но не на Solaris - PullRequest
2 голосов
/ 20 февраля 2011

Я пытаюсь сохранить вывод команды bash в переменной.Я довольно новичок в написании сценариев оболочки, но пока у меня есть следующее:

#!/bin/sh
MOSTRECENTMOD="$(echo | ls -t | head -n1)"
echo "$MOSTRECENTMOD"

Это прекрасно работает в Cygwin, но не в Solaris.Есть идеи?Я использую новые строки Unix.Я много чего перепробовал, но, похоже, он просто не работает.

В Solaris он просто выводит:

$(echo | ls -t | head -n1)

при запуске..

Ответы [ 4 ]

4 голосов
/ 20 февраля 2011

Стандарт /bin/sh в Solaris довольно строго относится к System V Bourne Shell.Это категорически не POSIX-совместимая оболочка, и она не понимает нотацию $(...) (среди целого ряда других различий, более или менее важных).Это означает, что для продолжения использования /bin/sh вам нужно будет изменить нотацию $(..), чтобы использовать обратные метки (что неудобно показывать во встроенной уценке - я пробовал все виды последовательностей без успеха:

`...`

В качестве альтернативы, если ваша машина имеет /bin/bash, укажите это в строке shebang, в противном случае укажите /bin/ksh, который поддерживает запись $(...) и многие другие полезные функции.

2 голосов
/ 20 февраля 2011

Я считаю, что синтаксис $( ... ) взят из Bash, а не стандартного sh.Используйте обратные кавычки (`echo | ls -t | head -n1`) или измените #!/bin/sh на #!/bin/bash (при условии, что оно существует в вашей системе).

0 голосов
/ 20 февраля 2011

Solaris 10 и старше / bin / sh не совместим с POSIX по причине устаревшей совместимости.Если вы хотите оставить свой сценарий без изменений, что я бы порекомендовал, вам нужно переключиться на оболочку, поддерживающую нотацию posix $ (), например / bin / ksh, / usr / xpg4 / bin / sh или bash.

Например:

#!/bin/xpg4/bin/sh
MOSTRECENTMOD="$(echo | ls -t | head -n1)"
echo "$MOSTRECENTMOD"

Обратите внимание также, что Solaris 11 (Express) имеет совместимый / bin / sh, поэтому это не потребуется.

0 голосов
/ 20 февраля 2011

Я думаю, что ваша проблема в том, что у вас слишком много цитат.Избавьтесь от кавычек в первой строке, и это должно работать.

...