Альтернативы suid, для скриптов и интерпретируемых языков

похоже, что все эти люди не знали, как на самом деле заставить приглашение перейти BACK к показу [root@domain]~#

Мне трудно поверить, что он не получил прямого ответа на свой вопрос. Потому что я ищу тот же самый ответ.

%userx@voided ~>>$cat /etc/skel/.bashrc
# .bashrc

# If not running interactively, don't do anything
 [[ $- != *i* ]] && return

 alias ls='ls --color=auto'
 PS1='[\u@\h \W]\$ '

не меняет приглашение, чтобы указать root, когда человек использует su - password для перехода к root. мой показывает только #

когда он делает то же самое.

-2
17.04.2019, 09:37
2 ответа

Опираясь на решение одного из многих подобных вопросов:

#!/bin/sh

IFS=+
printf '%s = %s\n' "$*" "$(($*))"
  • "$*"расширит до позиционных параметров (аргументы командной строки ), разделенные $IFS. Мы устанавливаем IFSна +отдельно.

  • "$(($*))"использует $((... )), которая является арифметической подстановкой, для вычисления арифметического значения $*, аргументов командной строки с +в -между ними.

  • printfиспользуется для вывода двух строк с =между ними.

Тестирование:

$./script.sh 1 2 3
1+2+3 = 6
$./script.sh -1 2 3
-1+2+3 = 4
$./script.sh 1 2 3 4 2 2 3 1
1+2+3+4+2+2+3+1 = 18

В приведенном выше сценарии отсутствует проверка предоставленных аргументов командной строки, чтобы убедиться, что они являются целыми числами. Это делается для одного значения в вопросе «Проверка того, является ли введенное число целым числом ».

2
28.01.2020, 05:15
#! /usr/bin/gawk -E
BEGIN {
  sum = 0
  if (ARGC > 1) {
    for (i = 1; i < ARGC; i++) {
      n = strtonum(ARGV[i])
      printf "%s", i == 1 ? n : n < 0 ? " - " (-n) : " + "n
      sep = " + "
      sum += n
    }
    print " = "sum
  }
}
  • Это должно принимать числа с плавающей запятой (, но не inf, nanили такие вещи, как 0x1p6), шестнадцатеричные и восьмеричные числа
  • Для каждого аргумента рассматривается только ведущая часть (, игнорирующая пробелы ), которые можно интерпретировать как число.
  • Обратите внимание, что локаль учитывает десятичную -точку(.в английском языке, ,во многих других языках ).
  • Числа с плавающей запятой печатаются так же, как при использовании printf("%.6g"), а целые числа — как при использовании printf("%d"). Внутри gawkиспользует типы компилятора C doubleи long, но в последних версиях можно указать использовать произвольную точность с опцией -Mи переменной PREC.
$ locale decimal_point
.
$ that-script 1.23 -1e2 0x30 010 garbage
1.23 - 100 + 48 + 8 + 0 = -42.77
0
28.01.2020, 05:15

Теги

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