Я могу получить корректный $PATH при выполнении sudo-u db2inst-sh "db2"?

Можно использовать l расширение параметра отмечает для заполнения числа слева.

i=0; for x in *; do ((++i)); mv -- $x new/${(l:6::0:)i}; done

Существует относительно простой способ сделать это только с функциями POSIX: начните нумеровать по телефону 1000001 (для 6 цифр) вместо 1 и снимите изоляцию с продвижения 1. Это менее просто, но несколько символов короче.

i=1000000; for x in *; do i=$((i+1)); mv -- "$x" new/${i#1}; done

Если Вы хотите использовать в своих интересах zmv, можно использовать арифметическое выражение, которое увеличивает i в тексте замены.

i=0; zmv '*' '${(l:6::0:)$((++i))}'
i=1000000; zmv '*' '${$((++i))#1}'

Добавьте o спецификатор шарика, если необходимо отсортировать файлы в другом порядке. С zmv, необходимо передать -Q отметьте, когда шаблон будет содержать спецификаторы шарика.

2
07.11.2012, 01:41
2 ответа

В большинстве конфигураций sudo заменяет PATH переменная среды значением по умолчанию времени компиляции или значением, указанным в /etc/sudoers.

Можно сделать поиск пути прежде, чем передать команду sudo.

db2=$(unset -f db2; unalias db2 2>/dev/null; command -v db2)
sudo -u db2inst1 sh -c '"$0" connect to db; "$0" set …' "$db2"

В общем падеже, когда Вы знаете, что команда не является функцией, ни псевдонимом в Вашей текущей оболочке и что полный путь не содержит специального символа:

sudo -u db2inst1 sh -c "$(command -v db2) connect to db; $(command -v db2) set …"

Отметьте использование двойных кавычек здесь, так, чтобы $(command -v db2) оценен во внешней оболочке. Можно подать команды на стандартном входе для сохранения большего количества ввода:

sudo -u db2inst1 $(command -v db2) <<\EOF
connect to db
set …
EOF
1
27.01.2020, 23:06
  • 1
    Гм, я должен найти путь как db2inst1 пользователь не как текущий пользователь. У текущего пользователя нет доступа к этому файлу. –  Radek 07.11.2012, 02:31
  • 2
    Вы могли объяснить, почему $PATH отображен правильно для sudo-u db2inst1, но выполнение файла, который находится в сбоях $PATH? –  Radek 07.11.2012, 02:32
  • 3
    @Radek, О, я думаю, что неправильно читал вопрос, Ваши признаки не являются точно обычными. Из чего вывод sudo -u db2inst1 sh -c "type db2"? У Вас есть доступ к sudoers файл, и если так, каковы соответствующие настройки (применимое Defaults строки и строка, которые позволяют Вам работать db2 как db2inst1)? –  Gilles 'SO- stop being evil' 07.11.2012, 02:38
  • 4
    sudo -u db2inst1 sh -c "type db2" дает мне sh: line 0: type: db2: not found –  Radek 07.11.2012, 02:47
  • 5
    @Radek, что, я неправильно читал Ваш вопрос во второй раз. sudo -u db2inst1 sh -c "id;$PATH;ls /opt/ibm/db2/V9.7/bin/db2" расширяется PATH во внешней оболочке. Вы действительно находите db2 в пути текущего пользователя, не в db2inst1путь. А-ч –  Gilles 'SO- stop being evil' 07.11.2012, 02:56
sudo -u db2inst1 -i sh -c "db2 connect to DBNAME"
-1
27.01.2020, 23:06

Теги

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