В интерактивной оболочке, почему кто-либо установил бы IFS на что-то другое, чем значение по умолчанию?

Ваш диск, вероятно, реагирует на то, чтобы быть зондируемым smartd. Если так, затем нет никакой настоящей проблемы. Проверьте smartd.conf и посмотрите, упоминается ли/dev/hdc там в строке, это не комментируется.

3
28.02.2013, 14:37
2 ответа

В интерактивной оболочке, $IFS будет значение по умолчанию, если Вы не изменили его, или что-то в оболочке запускает сценарии (как ~/.bashrc для bash) или любые другие полученные сценарии или функции оболочки, выполняемые начиная с оболочки, были запущены, изменяют его (они обычно не были бы или возвращать его к значению по умолчанию, если они правильно записаны хотя).

Если те функции, определяемые в емкостно-резистивных файлах или других полученных файлах правильно записаны, и они должны использовать разделение слова, они ничего не приняли бы на текущем значении IFS, таким образом, это должно быть хорошо для Вас, действительно устанавливают его на другое значение.

Однако, после того как Вы изменяете его, необходимо помнить, что Вы сделали, поскольку это могло бы влиять на путь командные строки, Вы работаете, позже интерпретируются.

Например, если Вы делаете:

IFS=:; ls -- $PATH

Перечислять каталоги в $PATH, Вы могли бы задаться вопросом почему позже вещи как:

rm -f -- $(cat ~/my.file.list)

не работайте больше. Таким образом, Вы могли бы также записать это:

(IFS=:; ls -- $PATH)

Или:

IFS=:; ls -- $PATH; unset IFS

(BTW, unset IFS восстанавливает разделение слова к его поведению по умолчанию, но нет $IFS и это повреждается (не правильно записанный) функции, которые делают вещи как oldIFS=$IFS; IFS=xxx; ...; IFS=$oldIFS восстановить $IFS).

7
27.01.2020, 21:11
  • 1
    Можно также установить его для единственной команды IFS=: ls -- $PATH, без подоболочки. –  jordanm 27.02.2013, 18:28
  • 2
    @jordanm, номер, который вставляет IFS=: в среду, переданную ls (которому не нравится он), но не влияет как это $PATH разделяется в этой командной строке. Вы могли сделать IFS=: command eval 'ls -- $PATH', но это является немного громоздким. –  Stéphane Chazelas 27.02.2013, 18:35

Конечно, Вы можете и должны ожидать это IFS набор должен принять значение по умолчанию, поскольку без него, все виды команд просто прекратят работать в целом.

Вы изменяете IFS в оболочке (временно) по тем же причинам, Вы делаете это в сценарии удара, когда Вам, оказывается, нужна она (который редко когда-либо происходит). Если Вы собираетесь использовать определенную команду только, после того как нет никакой причины записать это в сценарий оболочки. Кроме этого нет никакого различия между сценарием оболочки и использованием оболочки непосредственно.

1
27.01.2020, 21:11
  • 1
    Для удаления беспорядка IFS не экспортируется в среду, и даже если это будут оболочки, проигнорируйте его после запуска, таким образом, установка IFS является интерактивными оболочками, то не будет влиять ни на какую команду, запущенную той оболочкой, если те команды не создаются в оболочке как read или . (иначе source) или функции Вы определяете. –  Stéphane Chazelas 27.02.2013, 18:05

Теги

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