Оболочка Korn и Bash заменяют переменную пробелом через SSH.

Когда вы запускаете файл, во многих случаях вам не нужно его читать, поэтому вам не нужно разрешение на чтение. Вы правы, система должна прочитать его от вашего имени, но это не определяется как требующее разрешения на чтение (, потому что ничто не работает так, как вам когда-либо требуется доступ к содержимому файла ).

Исключение составляют любые обстоятельства, при которых выполнение файла включает его чтение, процессом, запущенным с вашими учетными данными . Таким образом, сценарии оболочки, на самом деле сценарии в целом, требуют разрешения на чтение, как и любой исполняемый файл, обрабатываемый binfmt_misc.

Точно так же доступ к каталогу не предполагает его чтения. :Вы можете войти в каталог, не перечисляя его содержимое. Думайте об этом как об исследовании здания с завязанными глазами :разрешение на выполнение/поиск позволяет вам открывать двери, чтобы сменить комнату (если вы уже знаете, где находятся двери ), разрешение на чтение позволяет вам снять повязку с глаз посмотреть, что в комнате.

0
29.10.2019, 12:12
2 ответа

Попытался обходной путь, описанный ниже, с использованием строки while read. Это исправило мою проблему.

ssh hscroot@$hmc "lssyscfg -r lpar -m $frame -F name,lpar_env" | cut -d, -f1 | sort | while read line
do
lpar=`echo ${line} | cut -d= -f2`
echo "$lpar"
for lpar_id in $(ssh -nq hscroot@$hmc "lssyscfg -r lpar -m $frame -F name:lpar_env:lpar_id --filter lpar_names="${lpar}" " | cut -d: -f3 | sort)
do
echo "$lpar_id"
done
done
0
28.01.2020, 03:10

вам нужно защитить lpar , поэтому я буду добавлять \ перед каждой двойной -кавычкой

Это пример, который проверяет оба:

for lpar in "1"  "2 3" "2;3" "abc" "abc def" "abc;def"   ; 
do 
     echo "#${lpar}#" ;
     ssh XXXX@EXAMPLE.COM  "printf 'arg1:%s arg2:%s\n'  --filter  par_names=\"${lpar}\"  " ;
     ssh XXXX@EXAMPLE.COM  "printf 'arg1:%s arg2:%s\n'  --filter  par_names="${lpar}"  " ;
done 
0
28.01.2020, 03:10

Теги

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