Я думаю, что Вы ищете альтернативу для winform для C# в Linux, посмотрите на сообщение на stackoverflow https://stackoverflow.com/questions/3693656/alternative-to-winforms-that-can-be-easily-used-with-c-sharp-and-net
Или ищите Google то же.
В то время как я писал скрипт для КШ
, я заметил, что -A
вариант встроенного
Команда, кажется, не поддерживается в более старых версиях ksh
. И это, кажется, верно для всех систем, которые я проверил, который включал Solaris, Aix, HP-UX и Linux.
Итак, вот решение в качестве функции ksh:
is_modern_ksh() {
if whence -a whence > /dev/null 2>&1 ; then
return 0 #success -> true
fi
#Else the call to `whence` failed because `-a` is not supported
return 1 #failure -> false
}
И вот как его использовать:
if is_modern_ksh ; then
echo "You're using a MODERN version of ksh. :)"
else
echo "You're using an OLD version of ksh. :("
fi
Для "настоящих" ksh
релизов (т.е. На базе AT&T) я использую эту команду:
strings /bin/ksh | grep Version | tail -2
Вот различные выходы, которые я получаю:
Original ksh:
@(#)Version M-11/16/88i
dtksh;
@(#)Version 12/28/93
Version not defined
Modern ksh93:
@(#)$Id: Version AJM 93u+ 2012-08-01 $
Для pdksh
/msh
ksh
клонов и современных версий AT&T ksh
тоже есть кое-что, что работает:
$ mksh -c 'echo $KSH_VERSION'
@(#)MIRBSD KSH R50 2015/04/19
Edit:
kshksh
. Я не заметил, что вы спрашивали об этом изнутри скрипта, не зная путь к тестируемому двоичному файлу ksh.
Если вы действительно хотите, чтобы использовалась версия ksh
, а не те возможности, которые она поддерживает, вот один из способов сделать это, используя только команду strings
, которая должна работать, по крайней мере, на Linux и Solaris:
echo $(for i in $(find /proc/$$ ! -type d ! -name "pagemap" |
grep -v "/path/" | grep -v "/fd/" ) ; do
strings $i | egrep "([V]ersion|[K]SH_VERSION).*[0-9]" | sort -u
done 2>/dev/null)
Обратите внимание, что этот метод ненадежен, так как /proc
может быть не смонтирован, и, конечно, есть и другие слабые места. Он не протестирован на других Unix операционных системах.
Эти команды сделали хитрость:
firewall-cmd --permanent --zone=trusted --add-interface=docker0
firewall-cmd --permanent --zone=trusted --add-port=4243/tcp
-121--13315- Вы можете сделать это с аудио cd функции k3b. Просто добавьте файлы в проект и запустите процесс записи. K3b перепишет файлы, прежде чем на самом деле их записать. Если вам нужны дополнительные кодеры для выполнения перекодировки, вы будете уведомлены об этом.
-121--217256-CTRL + ALT + V
или
ESC , CTRL + V
Как правило, доказали свою высокую надежность при интерактивном определении используемой версии KSH, однако создание сценариев доказало свою эффективность
Я думаю, что .sh.version
существует с момента первой версии ATT KSH 93. Он не доступен в PDKSH или MKSH. С $ {. Sh.version}
- это синтаксическая ошибка в оболочках, отличных от ksh93, оберните тест для него в подставке и защищают его позади EVAL
.
_sh_version=$(eval 'echo "${.sh.version}"' 2>/dev/null) 2>/dev/null
case $_sh_version in
'') echo "This isn't ATT ksh93";;
…
esac
ksh_version
Начал в общественном домене KSH клона (PDKSH) и был добавлен к фактической оболочке Korn сравнительно недавно, в 2008 году с KSH93T.
, а не тест на номер версии, вы должны проверить для конкретной функции, которая дает вам горе. Большинство функций могут быть проверены на пробовать какую-то конструировать в подпункте и посмотреть, запускает ли он ошибкой.
KSH_VERSION
не был реализован в ksh93
до версии 93t. Он будет установлен в mksh
, pdksh
, lksh
. Итак, чтобы проверить версию ksh
, мы можем попробовать следующие шаги:
KSH_VERSION
для обнаружения mksh
, pdksh
, lksh
ksh93
и ksh88 / 86
( Пусть Дэвид Корн покажет нам ). Имея это в виду, я выберу:
case "$KSH_VERSION" in
(*MIRBSD*|*PD*|*LEGACY*) printf '%s\n' "$KSH_VERSION" ;;
(*) [ -z "$ERRNO" ] && printf '%s\n' "${.sh.version}" || echo ksh88/86 ;;
esac
Я думаю, что основная проблема с использованием $ {. Sh.version} заключается в том, что ksh88 просто останавливается с ненулевым кодом выхода.
Итак, мое решение состоит в том, чтобы поместить код, который ссылается на $ {. Sh.version}, во вспомогательную оболочку, а затем проверить, выходит ли эта вспомогательная оболочка ненулевым значением и имеет ли во вспомогательной оболочке код, который будет работать в версиях ksh, где ссылка на $ {. sh.version} действительно работает. Оборачивание его в функцию, которая затем вызывается другой функцией, которая меняет код возврата, так что последний вызов проверяет истинность.
function is_oldksh
{
(test -n ${.sh.version}) 2>/dev/null
}
function oldkshtest
{
is_oldksh || return 0 && return 1
}
oldkshtest && echo "old ksh" || echo "new ksh"
Я запускал это в AIX и Oracle Enterprise Linux 5 и 6 с ksh88, ksh93 и pdksh.
Пит