Bash по сравнению с каналами ksh

можно скрыться путем изменения последнего файла данных для входа, если у Вас есть учетная запись полномочия пользователя root. как

/var/log/wtmp

это покажет пробел последней информации о журнале.

4
15.02.2013, 22:30
1 ответ

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

Вы встретились с тем, что является, вероятно, несовместимостью № 1 между ksh и ударом когда дело доходит до сценариев. ATT ksh (и ksh88 и ksh93) и zsh выполняет последнюю (самую правую) команду в конвейере в родительской оболочке, тогда как другие оболочки (Граница, пепел, удар, pdksh, mksh) выполняют все команды включая последнюю в подоболочке.

Вот простая тестовая программа:

msg="a subshell"
true | msg="the parent shell"
echo "This shell runs the last command of a pipeline in $msg"

В ATT ksh и zsh, втором присвоении на msg выполняется в родительской оболочке, таким образом, эффект видим после конвейера. В других оболочках это присвоение выполняется в подоболочке, таким образом, первое присвоение остается на месте в родителе.

Обходное решение должно выполнить остальную часть сценария в конвейере. Это - общая идиома для чтения данных и выполнения некоторой обработки позже:

output_some_stuff | {
  var=
  while IFS= read -r line; do
    var=$(process "$line")
  done
  use "$var"
}

Вы, кажется, столкнулись с ksh ошибкой. Я рекомендую обновить до неошибочной версии. Если это не возможно, попробуйте обходное решение Stephane Chazelas. В то время как можно попытаться запустить скрипты в ударе, это не (и не симулирует быть), общедоступная замена для ksh; существует много ksh функций, которые удар не имеет (и наоборот). Bash и ksh только совместимы в их ядре POSIX и некоторых других центральных функциях (в особенности массивы, [[ … ]], и локальные переменные в функциях, объявленных typeset).

Вы могли также попробовать zsh, который при вызове как ksh ведет себя способом, это немного ближе к ksh, чем удар. Можно, тем не менее, столкнуться с несовместимостями.

4
27.01.2020, 20:56
  • 1
    Извините за быстрое движение. Теперь я знаю то, что проблема, и я могу найти решение, ли, обновив ksh, с помощью другой оболочки, или с помощью различных методов для работы вокруг проблемы. Я должен буду настроить некоторый VMs, чтобы смочь выполнить систему в тестовой среде теперь и создать достаточно большие данные тестирования для тиражирования проблемы, иначе я не буду знать, решил ли я проблему или нет.Спасибо. –  Johan 16.02.2013, 09:16

Теги

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