можно скрыться путем изменения последнего файла данных для входа, если у Вас есть учетная запись полномочия пользователя root. как
/var/log/wtmp
это покажет пробел последней информации о журнале.
Ваш вопрос немного хаотичен. Я отвечу, что, кажется, центральная часть на различии между 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, чем удар. Можно, тем не менее, столкнуться с несовместимостями.