Глобальные переменные плохо

Ваша команда не работает, потому что перенаправление выполняется Вашей оболочкой, которая не имеет разрешения записать в /root/test.out. Перенаправление вывода не выполнено sudo.

существует несколько решений:

  • Выполнение оболочка с sudo и дают команду ему при помощи -c опция:

    sudo sh -c 'ls -hal /root/ > /root/test.out'
    
  • Создают сценарий с Вашими командами и выполняют тот сценарий с sudo:

    #!/bin/sh
    ls -hal /root/ > /root/test.out
    

    Выполнение sudo ls.sh. Посмотрите Steve Bennett ответ , если Вы не хотите создавать временный файл.

  • Запуск оболочка с sudo -s тогда выполняет Ваши команды:

    [nobody@so]$ sudo -s
    [root@so]# ls -hal /root/ > /root/test.out
    [root@so]# ^D
    [nobody@so]$
    
  • Использование sudo tee (если необходимо выйти из много при использовании -c опция):

    sudo ls -hal /root/ | sudo tee /root/test.out > /dev/null
    

    перенаправление к [1 110] необходимо для остановки мишень от выведения до экрана. К [1 120] добавляют вместо того, чтобы перезаписать выходной файл (>>), используют tee -a, или tee --append (последний характерен для [1 116] GNU coreutils).

Спасибо переходит в [1 117] Jd, Adam J. Forster и Johnathan для вторых, третьих и четвертых решений.

7
задан PositiveGuy 22 July 2009 в 03:59
поделиться

5 ответов

В C # пример глобальная переменная будет общедоступной статической переменной в общедоступном классе. Вся программа могла читать / писать в нее, и она также могла быть разделена между потоками.

11
ответ дан 6 December 2019 в 10:02
поделиться

Частное поле в вашем классе обычно называется «переменной уровня класса». Он не является глобальным для вашего приложения, потому что только ваш класс имеет к нему доступ.

Глобальная переменная - это переменная, к которой все в вашей программе может получить доступ независимо от того, в какой области она находится.

Пример глобальной переменной будет быть чем-то вроде объекта Application в ASP.Net (общедоступный статический экземпляр класса HttpApplication). Любой объект в любое время в любом файле кода программной части может иметь доступ к объекту Application для поиска этого значения. Как правило, сохранение значений в объекте Application - плохая идея, если вы действительно не знаете, что делаете, по всем причинам, упомянутым в статье, на которую вы ссылаетесь.

6
ответ дан 6 December 2019 в 10:02
поделиться

Нет. Глобальные переменные - это переменные, которые доступны для всей вашей программы. Частные переменные-члены фактически противоположны глобальным переменным. В C / C ++ глобальной переменной будет та, которая объявлена ​​вне объявления функции или класса. В C ++ и Java общедоступная статическая переменная, которая не является константой, также будет считаться глобальной переменной, поскольку вся программа может получить к ней доступ.

2
ответ дан 6 December 2019 в 10:02
поделиться

В основном существуют другие механизмы, которые могут приводит к введению глобальных переменных:

  • Пара AppDomain.GetData / AppDomain.SetData - Получает / устанавливает значение, хранящееся в текущем домене приложения для указанного имени, которое доступно либо из других доменов приложения.
  • Thread.GetData / SetData пара - Получает / устанавливает значение из указанного слота в текущем потоке в пределах текущего домена текущего потока.

Как указано в арктике, их лучше избегать.

0
ответ дан 6 December 2019 в 10:02
поделиться

В C # на самом деле нет ничего, что можно было бы назвать «глобальной» переменной. Самой близкой будет общедоступная статическая переменная; то, что доступно для всех частей программы в любое время.

0
ответ дан 6 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

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