Я не уверен, достаточно ли это для Вас, но Вы могли бы использовать column
программа и считала выбранные части использования файла head
и/или tail
как это:
head -n 300 myfile.csv | tail -n 100 | column -ts ',' | less
head -n-300 myfile.csv | head -n 100 | column -ts ',' | less
Вы могли обернуть его в некотором сценарии для просмотра различных частей файла за один раз (вероятно, без less
затем). Кроме этого, я боюсь, что это была бы проблема для использования только инструментов GNU для задания.
PATH=$PATH:~/opt/bin
или
PATH=~/opt/bin:$PATH
в зависимости от того, хотите ли Вы добавить ~/opt/bin
в конце (чтобы искаться после всех других каталогов, в случае, если существует программа тем же именем в нескольких каталогах), или вначале (чтобы искаться перед всеми другими каталогами).
Можно добавить многократные въезды одновременно. PATH=$PATH:~/opt/bin:~/opt/node/bin
или вариации на упорядочивание работают просто великолепно. Не помещать export
в начале строки, поскольку это имеет дополнительные сложности (см. ниже в соответствии с “Примечаниями по оболочкам кроме удара”).
Если Ваш PATH
создается многими различными компонентами, Вы могли бы закончить с дублирующимися записями. Посмотрите, Как добавить путь корневого каталога, который будет обнаружен Unix, которые управляют? и Удалите дублирующиеся записи $PATH с командой awk, чтобы не добавить дубликаты или удалять их.
Автоматически помещаются некоторые дистрибутивы ~/bin
в Вашем ПУТИ, если это существует, между прочим.
Поместите строку для изменения PATH
в ~/.profile
, или в ~/.bash_profile
если это - то, что Вы имеете.
Отметьте это ~/.bash_rc
не читается никакой программой, и ~/.bashrc
конфигурационный файл интерактивных экземпляров удара. Вы не должны определять переменные среды в ~/.bashrc
. Правильное место для определения переменных среды такой как PATH
~/.profile
(или ~/.bash_profile
если Вы не заботитесь об оболочках кроме удара). Посмотрите то, Что различие между ними и какой я должен использовать?
Не вставляйте его /etc/environment
или ~/.pam_environment
: это не файлы оболочки, Вы не можете использовать замены как $PATH
там. В этих файлах можно только переопределить переменную, не добавляют к нему.
Вам не нужно export
если переменная уже находится в среде: любое изменение значения переменной отражается в среде. ¹ PATH
находится в значительной степени всегда в среде; все системы Unix устанавливают его очень вначале (обычно в самом первом процессе, на самом деле).
Во время входа в систему можно полагаться PATH
нахождение уже в среде, и уже содержащий некоторые системные каталоги. Если Вы пишете сценарий, который может быть выполнен рано при установке некоторой виртуальной среды, Вы, возможно, должны гарантировать это PATH
непусто и экспортирован: если PATH
все еще сброшен, затем что-то как PATH=$PATH:/some/directory
установил бы PATH
кому: :/some/directory
, и пустой компонент вначале означает текущий каталог (как .:/some/directory
).
if [ -z "${PATH-}" ]; then export PATH=/usr/local/bin:/usr/bin:/bin; fi
В ударе, ksh и zsh, export
специальный синтаксис и оба PATH=~/opt/bin:$PATH
и export PATH=~/opt/bin:$PATH
сделайте правильную вещь даже. В других оболочках Bourne/POSIX-style, таких как тире (который является /bin/sh
во многих системах), export
анализируется как обычная команда, которая подразумевает два различия:
~
только анализируется в начале слова, кроме присвоений (см., Как добавить путь корневого каталога, который будет обнаружен Unix, которые управляют? для деталей);$PATH
вне двойных кавычек повреждается если PATH
содержит пробел или \[*?
.Таким образом в оболочках как тире, наборы export PATH=~/opt/bin:$PATH
PATH
к литеральной строке ~/opt/bin/:
сопровождаемый значением PATH
до первого пространства. PATH=~/opt/bin:$PATH
(пустое присвоение), не требует кавычек и делает правильную вещь. Если Вы хотите использовать export
в портативном сценарии необходимо записать export PATH="$HOME/opt/bin:$PATH"
, или PATH=~/opt/bin:$PATH; export PATH
(или PATH=$HOME/opt/bin:$PATH; export PATH
для мобильности даже к Оболочке Bourne, которая не приняла export var=value
и не сделал расширения тильды).
¹ Это не было верно в Оболочках Bourne (как в фактической Оболочке Bourne, не современных оболочках стиля POSIX), но Вы очень вряд ли встретитесь с такими старыми оболочками в эти дни.
Так или иначе работы, но они не делают того же самого: элементы PATH
проверяются слева направо. В Вашем первом примере, исполняемых файлах в ~/opt/bin
будет иметь приоритет по установленным, например, в /usr/bin
, который может или не может быть тем, что Вы хотите.
В частности, с точки зрения безопасности опасно добавить пути к передней стороне, потому что, если кто-то может получить доступ для записи к Вашему ~/opt/bin
, они могут поместить, например, другое ls
там, который Вы затем, вероятно, использовали бы вместо /bin/ls
без того, чтобы замечать. Теперь вообразите то же для ssh
или Ваш браузер или выбор... (То же идет трижды для помещения. в Вашем пути.)
ls
, необходимо поместить его в каталог перед /bin
.
– Barmar
17.09.2015, 23:20
Я смущен вопросом 2 (так как удаленный из вопроса, так как это происходило из-за несвязанной проблемы):
Что осуществимый путь состоит в том, чтобы добавить больше путей на различных строках? Первоначально я думал, что это могло добиться цели:
export PATH=$PATH:~/opt/bin export PATH=$PATH:~/opt/node/bin
но это не делает, потому что второе присвоение не только добавляет
~/opt/node/bin
, но также и целоеPATH
ранее присвоенный.Это - возможное обходное решение:
export PATH=$PATH:~/opt/bin:~/opt/node/bin
но для удобочитаемости я предпочел бы иметь одно присвоение для одного пути.
Если Вы говорите
PATH=~/opt/bin
это - все, что будет в Вашем ПУТИ. ПУТЬ Является просто переменной среды, и если Вы хотите добавить к ПУТИ, необходимо восстановить переменную с точно содержанием, которое Вы хотите. Таким образом, что Вы даете как пример для опроса 2, точно, что Вы хотите сделать, если я полностью не упускаю суть вопроса.
Я использую обе формы в своем коде. У меня есть универсальный профиль, который я устанавливаю на каждой машине, я работаю над этим, похож на это, для размещения для потенциально недостающих каталогов:
export PATH=/opt/bin:/usr/local/bin:/usr/contrib/bin:/bin:/usr/bin:/usr/sbin:/usr/bin/X11
# add optional items to the path
for bindir in $HOME/local/bin $HOME/bin; do
if [ -d $bindir ]; then
PATH=$PATH:${bindir}
fi
done
Linux определяет исполняемый путь поиска с $PATH
переменная среды. Добавить каталог,/data/myscripts к началу $PATH
переменная среды, используйте следующее:
PATH=/data/myscripts:$PATH
Чтобы добавить что каталог в конец пути, используйте следующую команду:
PATH=$PATH:/data/myscripts
Но предыдущие не достаточны, потому что при установке переменной среды в сценарии то изменение является эффективным только в рамках сценария. Существует только два пути вокруг этого ограничения:
Примеры:
$HOME/myscript.sh
source $HOME/myscript.sh
Включение в основном включает "названный" сценарий в сценарий "вызова". Это похоже на #include в C. Таким образом, это эффективно в сценарии "вызова" или программе. Но конечно, это не эффективно ни при каких программах или сценариях, названных программой вызова. Для создания этого эффективным полностью вниз цепочка вызовов необходимо следовать за установкой переменной среды с командой экспорта.
Как пример, программная оболочка удара включает содержание файла .bash_profile включением. Поместите следующие 2 строки в .bash_profile:
PATH=$PATH:/data/myscripts
export PATH
эффективно помещает те 2 строки кода в программу удара. Таким образом в ударе, переменная $PATH включает $HOME/myscript.sh
, и из-за оператора экспорта, любые программы, названные ударом, имеют измененный $PATH
переменная. И потому что любые программы, которые Вы запускаете от подсказки удара, называет удар, новый путь находится в силе для чего-либо, что Вы выполняете от подсказки удара.
Нижняя строка - то, что для добавления нового каталога к пути необходимо добавить или предварительно ожидать каталог к переменной среды $PATH в рамках сценария, включенного в оболочку, и необходимо экспортировать $PATH
переменная среды.
Больше информации здесь
Вот мое решение:
PATH=$(echo -n $PATH | awk -v RS=: -v ORS=: '!x[$0]++' | sed "s/\(.*\).\{1\}/\1/")
Приятный простой вкладыш, который не делает оставить трейлинг :
Видимо, это была ошибка в ядре. Он был исправлен в https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/drivers/scsi/storvsc_drv.c?id=e86fb5e8ab95f10ec5f2e9430119d5d35020c951
-121--186407- gunzip
и gzcat
являются псевдонимами удобства для gzip -d
и gzip -cd
соответственно. На самом деле, если посмотреть, вы увидите, что они реализованы в виде сценариев оболочки, которые вызывают gzip
с соответствующими опциями. Таким образом, существует нулевая разница в загрузке ЦП или других характеристиках производительности.
Возможная разница ввода-вывода зависит от того, выполняется ли запись выходных данных в файл. Но это не зависит от того, как вызывается gzip
, поскольку, например, все следующие команды записывают свои выходные данные в файл:
gunzip file.gz
gzcat file.gz >file
gzip -cd file.gz >file
Если вы не записываете выходные данные в файл, а в канал, например:
gzcat file.gz | less
gzip -cd file.gz | mail root
Тогда вы можете заметить разницу, но это зависит от многих вещей, таких как, насколько велик файл, как часто и как долго конвейер останавливается, объем буферной памяти в вашей системе и т.д.
-121--128854-Я не могу говорить за другие дистрибутивы, но Ubuntu имеет файл/etc/environment, который является путем поиска по умолчанию для всех пользователей. Поскольку мой компьютер используется только мной, я помещаю туда любые каталоги, которые я хочу, если только это не временное дополнение, которое я помещаю в сценарий.
Для меня (на Mac OS X 10. 9.5), добавление имени пути (например, /mypathname
) в файл /etc/paths
сработало очень хорошо.
Перед редактированием echo $PATH
возвращает:
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
После редактирования /etc/paths
и перезапуска оболочки, к переменной $PATH добавляется /pathname
. Действительно, echo $PATH
возвращает:
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/mypathname
Произошло то, что /mypathname
было добавлено к переменной $PATH
.
В течение некоторого времени у меня есть две функции pathadd
и pathrm
, которые помогают добавлять элементы в путь, не беспокоясь о дублировании.
pathadd
принимает единственный аргумент пути и необязательный после аргумента
, который, если он указан, будет добавлен к PATH
, в противном случае он добавит его в начало.
Практически в каждой ситуации, если вы добавляете в путь, вы, вероятно, захотите переопределить все, что уже есть в пути, поэтому я предпочитаю добавлять по умолчанию.
pathadd() {
newelement=${1%/}
if [ -d "$1" ] && ! echo $PATH | grep -E -q "(^|:)$newelement($|:)" ; then
if [ "$2" = "after" ] ; then
PATH="$PATH:$newelement"
else
PATH="$newelement:$PATH"
fi
fi
}
pathrm() {
PATH="$(echo $PATH | sed -e "s;\(^\|:\)${1%/}\(:\|\$\);\1\2;g" -e 's;^:\|:$;;g' -e 's;::;:;g')"
}
Поместите их в любой сценарий, который вы хотите изменить среду PATH, и теперь вы можете это сделать.
pathadd "/foo/bar"
pathadd "/baz/bat" after
export PATH
Вы гарантированно не добавите к пути, если он уже есть. Если теперь вы хотите убедиться, что / baz / bat
находится в начале.
pathrm "/baz/bat"
pathadd "/baz/bat"
export PATH
Теперь любой путь можно переместить на передний план, если он уже находится на пути, без дублирования.
Чтобы добавить новый путь к переменной окружения PATH
:
export PATH=$PATH:/new-path/
Для этого изменения для применения к каждой открытой вами оболочке, добавьте его в файл, который оболочка будет источником при вызове. В разных оболочках это может быть:
например
# export PATH=$PATH:/root/learning/bin/
# source ~/.bashrc
# echo $PATH
Указанный путь можно увидеть в приведенном выше выводе.