Вместо того, чтобы хранить вывод целиком (со встроенными символами новой строки) в переменной скаляра, можно было (я не говорил, что должен ) хранить строки в переменной массива.
С помощью ksh93
, mksh
, bash
, zsh
в эмуляции sh
:
IFS='
' # split on newline
set -f
var=($(snmpwalk -v2c -c private "$ip" .1.1.1.6))
А затем используйте printf
, как:
printf "$hostname=>%s\n" "${var[@]}"
Это предполагает, однако, что $hostname
не содержит символов процента или обратного слеша.
rc
и zsh
проще:
rc
:
var = (``(").
'){snmpwalk -v2c -c private $ip .1.1.1.6}))
printf %s\n $hostname'=>'^$var
zsh
:
var=(${(f)"$(snmpwalk -v2c -c private $ip .1.1.1.6)"})
printf '%s\n' $hostname'=>'$^var
(обратите внимание, что все эти решения игнорируют пустые строки)
Это возможно с SGID.
Так можно прочитать больше на этом здесь: http://linoxide.com/how-tos/stickbit-suid-guid/
Пример на то, как на самом деле сделать это:
Реализация SGID на Каталог:
# chmod g+s /test/
# ls -ld /test
drwxrwsrwx 2 root root 4096 Mar 8 03:12 /test
Now swich to other user and create a file in /test directory.
# su - roger
$ cd /test/
$ touch roger.txt
$ ls -l roger.txt
-rw-rw-r-- 1 roger root 0 Mar 8 03:13 roger.txt