Как передать два стандартных ввода в sudo?

Oneliners с awkот @steeldriver сделают свою работу, но если вы хотите, чтобы шеллскрипт bash читал строки, вы можете сделать это следующим образом:

#!/bin/bash

set -e
set -o pipefail

filename="0101.tsv"
while IFS= read -r line
do
 s=0
 len=${#line}
# echo "line=$line"
# echo "len=$len"
 for (( i=0; i<$len; i++ ))
 do
  if [ "${line:i:1}" ==  $'\t' ]
  then
   s=$((s +1))
  fi
 done
 echo $s

 if [[ "$s" == "995" ]]; then
  printf "%s\n" "$line"
  continue
 fi
done < "$filename" > abc.tsv
1
09.12.2020, 01:38
1 ответ

Это соответствует идее @roaima использовать вспомогательный файл для записи целевого:

  1. Войдите в систему как root, создайте простой скрипт с именем write-to-fileи следующим кодом:

    echo $1 > /etc/test.txt
    

(он должен быть размещен в /usr/local/bin и должен иметь только root разрешение на выполнение ).

  1. Как обычный пользователь, вы можете запускать его откуда угодно:

    echo 'password' | sudo -S write-to-file "hello!"
    

Таким образом, одна строка передается как стандартный ввод, а другая — как аргумент.

примечание:Я не знаю, может ли это решение привести к дыре в безопасности. На мой взгляд, это должно быть так же безопасно, как и обычное использование sudo.

0
18.03.2021, 22:45

Теги

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