Я замечаю, что вы используете ключ DSA. OpenSSH 7.0 и выше по умолчанию отключена поддержка ключей DSA. Можно проверить, вызывает ли это проблемы. См. SSH продолжает пропускать мой лобовый ключ и запрашивать пароль и https://superuser.com/q/1016989/93541 .
-121--228579-
awk 'NF==3' file
Печать строки, если число полей равно 3. Довольно просто изменить количество столбцов в соответствии с вашими данными.
Однако, как было указано, это не работает с требованием ОП о переменном количестве полей.
-121--66780-
hostname -I >> file_name
это сделает все, что вы хотите
Вам нужна переменная внутри вашей функции, которая после установки сохраняет свое значение. Так как это можно сделать только с глобальной переменной, вам нужно дать ей другое имя, например:
xtest(){
typeset -g test_variable
: ${test_variable:=$variable}
echo $test_variable
}
Это устанавливает test_variable
при первом вызове функции, но не перезаписывает его впоследствии.
ОБНОВЛЕНИЕ :Изменен синтаксис определения функции в соответствии с комментарием, данным Stéphane Chazelas, а также переименована моя функция из test в xtest, потому что в любом случае называть функцию «тест» — плохая идея.
Во-первых, обратите внимание, что синтаксис определения функции в zsh
, как и в оболочке Bourne,:
funcname() cmd
(хотя он также поддерживает синтаксис ksh function funcname {...}
и некоторые другие ).
fun
не является синтаксическим ключевым словом zsh
. С помощью fun foo() cmd
вы определяете функции fun
и foo
с cmd
в качестве тела.
Я бы также рекомендовал не использовать test
в качестве имени функции, поскольку test
— это имя стандартной команды (, встроенной в zsh
и большинстве других Bourne -, таких как оболочки ).
Здесь, если вам нужна функция с локальной переменной с фиксированным значением, вам нужно встроить это значение в определение функции:
mytest() {
local variable=test
echo $variable
}
variable
будет локальным по отношению к функции, но по-прежнему видимым для других функций, вызываемых этой mytest
, если таковые имеются. Если вы хотите, чтобы он был скрыт от других функций, то есть выполнять статическую область видимости, вы можете использоватьprivate
(в модуле zsh/param/private
)вместо local
.
Если вы хотите, чтобы это фиксированное значение было значением глобальной переменной $variable
во время определения mytest
, вам все равно нужно встроить его в определение, что-то как:
zmodload zsh/param/private
eval '
mytest() {
private variable='${(qq)variable}'
echo $variable
otherfunction...
}
'
Где мы вставляем содержимое переменной (, правильно цитируемой с${(qq)...}
)в определении.