Вы могли использовать Параллель GNU вместо этого:
$ echo "/Place/='http://www.google.com'" | parallel echo
/Place/='http://www.google.com'
Затем Вы не должны делать заключения в кавычки себя.
Подробнее: https://www.youtube.com/playlist? list=PL284C9FF2488BC6D1
pushd
, popd
, и dirs
оболочка builtins, которые позволяют Вам, управляют стопкой каталога. Это может использоваться для изменения каталогов, но возвратиться к каталогу, из которого Вы произошли.
$ ls
dir1 dir2 dir3
$ pushd dir1
~/somedir/dir1 ~/somedir
$ dirs
~/somedir/dir1 ~/somedir
dirs
команда подтверждает, что у нас есть 2 каталога на стеке теперь. dir1
и исходный dir, somedir
.Примечание: Наш "текущий" каталог ~/somedir/dir1
.
dir1
теперь)$ pushd ../dir3
~/somedir/dir3 ~/somedir/dir1 ~/somedir
$ dirs
~/somedir/dir3 ~/somedir/dir1 ~/somedir
$ pwd
/home/saml/somedir/dir3
dirs
шоу у нас есть 3 каталога в стеке теперь. dir3
, dir1
, и somedir
. Заметьте направление. Каждый новый каталог становится добавленным налево. Когда мы начнем появляющиеся каталоги, они прибудут слева также.
../dir2
$ cd ../dir2
$ pwd
/home/saml/somedir/dir2
$ dirs
~/somedir/dir2 ~/somedir/dir1 ~/somedir
$ popd
~/somedir/dir1 ~/somedir
$ pwd
/home/saml/somedir/dir1
Заметьте, что мы появились назад к dir1
.
$ popd
~/somedir
$ pwd
/home/saml/somedir
И мы вернулись, где мы запустили, somedir
.
Мог бы стать немного сбивающим с толку, но глава стека является каталогом, в котором Вы в настоящее время находитесь. Следовательно, когда мы возвращаемся к somedir
, даже при том, что dirs
шоу это:
$ dirs
~/somedir
Наш стек на самом деле пуст.
$ popd
bash: popd: directory stack empty
pushd
и popd
позвольте Вам управлять каталогами на стеке.
Когда Вы pushd
каталог, Вы помещаете текущий каталог на стек и каталог изменения к тому, указанному в качестве параметра.
popd
позволит Вам возвращаться к каталогу на стеке.
Если Вы повторитесь, то обход каталога будет видом сохраненных, и можно возвратиться к сохраненным каталогам в обратном порядке от того, в чем Вы сохранили их.
Один простой случай использования стека dirs, который нельзя сделать с помощью простого cd:
pushd .
добавляет текущий каталог XX в стек dirs
. После этого вы можете перемещаться, используя cd
, а чтобы вернуться в XX, достаточно выполнить popd
, независимо от того, насколько "далеко" вы находитесь в дереве каталогов (можно перепрыгивать через несколько уровней, вбок и т.д.). Особенно полезно в сценариях bash.
Существует действительно полезный вариант использования команд pushd
и popd
для работы с несколькими папками одновременно.
Вы можете легко перемещаться по стеку, поскольку он пронумерован. Это означает, что вы можете иметь в своем распоряжении несколько рабочих папок во время работы.
См. Простой пример ниже.
Во-первых, давайте создадим пример структуры папок.
user@vb:~$ mkdir navigate
user@vb:~/navigate$ mkdir dir1
user@vb:~/navigate$ mkdir dir2
user@vb:~/navigate$ mkdir dir3
Затем вы можете добавить все свои папки в стек:
user@vb:~/navigate$ pushd dir1/
~/navigate/dir1 ~/navigate
user@vb:~/navigate/dir1$ pushd ../dir2/
~/navigate/dir2 ~/navigate/dir1 ~/navigate
user@vb:~/navigate/dir2$ pushd ../dir3/
~/navigate/dir3 ~/navigate/dir2 ~/navigate/dir1 ~/navigate
Вы можете найти его по:
user@vb:~/navigate/dir3$ dirs -v
0 ~/navigate/dir3
1 ~/navigate/dir2
2 ~/navigate/dir1
3 ~/navigate
Для безопасной навигации вам нужно дважды добавить последнюю (нулевую) папку, так как она всегда будет перезаписана:
user@vb:~/navigate/dir3$ pushd .
user@vb:~/navigate/dir3$ dirs -v
0 ~/navigate/dir3
1 ~/navigate/dir3
2 ~/navigate/dir2
3 ~/navigate/dir1
4 ~/navigate
Теперь вы можете перемещаться по этим папкам и работать со стеком, как и с псевдонимами для папок.Думаю, следующая часть говорит сама за себя:
user@vb:~/navigate/dir3$ cd ~4
user@vb:~/navigate$ dirs -v
0 ~/navigate
1 ~/navigate/dir3
2 ~/navigate/dir2
3 ~/navigate/dir1
4 ~/navigate
user@vb:~/navigate$ cd ~3
user@vb:~/navigate/dir1$ dirs -v
0 ~/navigate/dir1
1 ~/navigate/dir3
2 ~/navigate/dir2
3 ~/navigate/dir1
4 ~/navigate
user@vb:~/navigate/dir1$ touch text.txt
user@vb:~/navigate/dir1$ cp text.txt ~2
user@vb:~/navigate/dir1$ ls ~2
text.txt
user@vb:~/navigate/dir1$ dirs -v
0 ~/navigate/dir1
1 ~/navigate/dir3
2 ~/navigate/dir2
3 ~/navigate/dir1
4 ~/navigate
Дополнительный совет - создать псевдоним для dirs -v
.
Например:
# In ~/.bashrc
alias dirs="dirs -v"
для bash , в основном: вместо использования cd можно использовать pushd
для изменения каталогов с практическим использованием: история посещенных каталогов сохраняется (правильно: складывается), и между ними можно переключаться
pushd /home; pushd /var; pushd log
Чтобы увидеть стек, используйте каталоги
и для упрощенная навигация (чтобы получить номера «записей стека», используйте:
dirs -v
Вывод:
me@myhost:/home$ dirs -v
0 /home
1 /var
2 /tmp
Теперь используйте эти числа с cd
и ~
, например:
cd ~1
Но теперь эти числа переставлены, и позиция "0" изменится, поэтому просто дважды переместите
каталог в верхнюю позицию (или используйте пустышку в позиции 0), например:
me@myhost:/home$ dirs -v
0 /home
1 /home
2 /var
3 /tmp
теперь 1..3 сохранит там позиция
(чтобы освободить текущий каталог из стека / удалить его из истории, используйте popd
)
Я нашел использование dirs/popd/pushd немного неудобным. Я придумал свое личное решение в tcsh, добавив следующий код в .alias
foreach b (. , - 0 1 2 3 4 5 6 7 8 9 )
alias p$b 'set a=`pwd`; echo $a >! ~/.mydir'$b
alias cd$b 'cd "`cat ~/.mydir'$b'`"'
alias del$b 'rm -v ~/.mydir'$b
alias home$b 'set a="~"; echo $a >! ~/.mydir'$b
end
alias cdl 'grep / ~/.mydir*'
Таким образом я назначил, например, "p." для сохранения текущего рабочего dir в файл ~/.mydir. и "cd." для восстановления этого dir в любое время и в любом месте. "del." удаляет соответствующий файл; "home." устанавливает каталог в домашний каталог (эквивалентно cd; p. ); "cdl" перечисляет сохраненные каталоги. Обратите внимание, что если вы используете ~/Dropbox/.mydir$b (или любой другой облачный сервис, например, ownCloud) вместо ~/.mydir$b, вы получите умный способ использовать предпочитаемые вами каталоги для разных учетных записей и машин.
I am using it like this in my bash_profile and.bashrc like this
vi.bash_profile
alias dirs="dirs -v"
source d.sh
:wq
vi.bashrc
alias dirs="dirs -v"
:wq
vi d.sh
pushd ~/Documents/GIT/seiso-data
pushd ~/Documents/GIT/ewe/EosRegistry
pushd ~/Documents/GIT_LODGING/site-cookbooks
pushd ~/Documents/CHEF_LODGING
pushd .
:wq
это помогает мне переключаться между каталогами, которые использовались последними на моем терминале.:-)Надеюсь, это поможет вам использовать pushd, а не popd. Я использую cd ~stackednumber
Проще говоря, когда вам нужно перемещаться между более чем двумя каталогами, как правило, несколько раз назад и вперед, так как cd -
просто не справится ни с чем, кроме двух папок.
Так, например, вместо того, чтобы заново -придумывать предыдущие длинные пути, просматривая историю своего буфера или вкладку -завершая длинный путь, вы просто складываете важные пути и, при необходимости, удобно перемещаете их. им только по их числу. Переключение между сложными структурами каталогов и длинными путями становится плавным и быстрым.
Встроенные функции также позволяют вам -переупорядочивать стек или извлекать каталоги, которые вам больше не нужны, что обеспечивает гибкость рабочего процесса.
Укладка каталогов также может использоваться в сценариях аналогичным образом для операций, охватывающих несколько каталогов.
Использование cd
и cd -
позволяет переключаться только между двумя последними использованными каталогами. Размер вашего «рабочего набора каталогов» равен двум.
Используя pushd
, вы можете хранить произвольно большое количество каталогов в своем рабочем наборе.
В большинстве случаев я использую pushd
, а не cd
. После того, как вы создали стек активных каталогов с помощью pushd directory_name
, вы можете прыгать между ними весь день с помощью pushd ~#
.
pushd dir1
pushd../dir2
pushd /full/path/to/dir3
# There are now three directories in the stack.
pushd ~3
pushd ~2
# The same three directories are still on the stack,
# just in a different order.
Я использую popd
редко, только когда я хочу удалить каталог из стека, когда я знаю, что я закончил использовать этот каталог.
Перейти в каталог и удалить его из стека:
popd ~2
Остаться в текущем каталоге и удалить другой каталог из стека:
popd +2
Вы получаете рабочий стиль, похожий на открытие нескольких окон или вкладок терминала (по одному для каждого каталога, в котором вы активно работаете ), но все в одном терминале. Это экономит место на экране, плюс, поскольку все пути к каталогам доступны в одной оболочке, вы можете делать такие вещи, как:
Примеры:
cp ~2/myfile.txt ~4
less ~2/myfile.txt
В tcsh
(, но не в bash
), вы даже можете сохранить свой стек каталогов в файл и восстановить его позже.
Сохранить:
dirs -S ~/dirstack
Восстановить:
dirs -L ~/dirstack
В противном случае просто замените ~
в примерах bash
на =
для использования в tcsh
.
pushd =2
popd =4
popd +1
Pushd/popd — это такая простая концепция, что мне потребовалось некоторое время, чтобы ее понять, поскольку люди склонны обучать ее, определяя эти команды как команды, которые «манипулируют стеком каталогов», что, на мой взгляд, очень запутанно.
Я смотрю на это по-другому:
pushd [имя папки _]-перейдет в [имя папки _] и будет документировать место назначения, которое является [имя папки _] в каталоге -куча. В то время как верхний каталог в стеке всегда будет текущим каталогом, в котором вы находитесь.
popd-будет cd в запись каталога , которая задокументирована в верхней части стека, а затем удалит документацию (из стека каталога -).
dirs-Напечатает dir -stack (, который можно рассматривать как dir Db, где самая левая запись является текущим каталогом (вершиной стека ).
Итак, 2 самых популярных варианта использования::
Вариант использования 1:Навигация с использованием pushd и popd
root@mypc:/main/$ ls
dir1 dir2 dir3 dir4
root@mypc:/main/$ dirs # prints the current stack
/main
root@mypc:/main/$ pushd dir1 # Will cd to dir1 and document dir1 in dir stack, stack is now:
/main/dir1 /main
root@mypc:/main/dir1$ # I am now in /main/dir1
root@mypc:/main/dir1$ # Now let's go wild and document whatever I want
root@mypc:/main/dir1$ pushd../dir2
root@mypc:/main/dir2$ # Woo I am in /main/dir2
root@mypc:/main/dir2$ pushd../dir3
root@mypc:/main/dir3$ # Woo I am in /main/dir3
root@mypc:/main/dir3$ pushd../dir4
root@mypc:/main/dir4$ # Woo I am in /main/dir4
root@mypc:/main/dir4$ dirs # Now dir stack is:
/main/dir4 /main/dir3 /main/dir2 /main/dir1 /main
Я сделал это, потому что хотел вернуться к задокументированным папкам! (используя popd, вместо того, чтобы вводить относительный или абсолютный путь к каждому каталогу, я хочу вернуться в ).
Обратите внимание, что если я вручную cd, я повлияю на верхний элемент стека каталога (, который всегда является текущим каталогом)
root@mypc:/main/dir4$ cd.. # Now dir stack is:
# (note that /main appear in the leftmost as well which is the top of the stack)
/main /main/dir3 /main/dir2 /main/dir1 /main
root@mypc:/main$
Теперь вернемся назад:
root@mypc:/main$ popd
root@mypc:/main$ # Still in /main since it was at the top of the dir stack
root@mypc:/main$ dirs # Stack is now:
/main/dir3 /main/dir2 /main/dir1 /main
root@mypc:/main$ popd
root@mypc:/main/dir3$ popd # Woo in dir3 now, about to navigate to dir2
root@mypc:/main/dir2$ popd # Woo in dir2, about to navigate to dir1
root@mypc:/main/dir1$ dirs # Stack is now:
/main
Опять же, я могу задокументировать любой каталог, который захочу, а затем вручную перейти к другому каталогу, после чего я смогу легко вернуться к документированному каталогу, который я вставил в стек.
Вариант использования 2:Навигация с использованием числового индекса стека
Допустим, я отправил pushd dir4 dir3 dir2 dir1,теперь запущенный каталог -v покажет:
root@mypc:/main$ dirs -v
0 /main/dir1 (this is the current dir you are in always)
1 /main/dir2
2 /main/dir3
3 /main/dir4
Теперь вы можете выполнять любые операции Linux, в которых задействованы каталоги, используя индекс стека:
root@mypc:/main$ cp ~2/temp.txt ~3/new_temp.txt # this will run in the background, something like:
# cp /main/dir2/temp.txt /main/dir3/new_temp.txt
Вы даже можете удалить определенную запись из стека каталогов -:
root@mypc:/main$ popd ~4
Надеюсь, что использование слов "документирование" или представление о стеке dir -как о своего рода Db упрощает концепцию!
cd -
, псевдонимы для сокращенияcd ..
, и т.д.). – syntagma 25.05.2013, 21:26pushd
&popd
в сценариях b/c они сохраняют меня от необходимости помнить, куда я происходил из, я могу всегда простоpopd
возвращаться из того, куда я приехал. Я обычно делаюpopd >/dev/null 2>&1
сделать это тихим. Я использую CD - каждый день в моей оболочке. Существуют некоторые другие экономящие время подсказки в этой статье также: thegeekstuff.com/2008/10 / …. – slm♦ 25.05.2013, 21:31cd -
только отслеживает последний каталог, я предполагаю, что было бы возможно иметь проблемы, если Вы вызываете функцию, которая также изменяет каталог внутренне. в этом случае функция закончила бы тем, что сбросила - к Вашему текущему каталогу, не каталогу, к которому Вы хотите появиться назад. pushd/popd является самым безопасным методом.Примечание: я не протестировал свою теорию. – Binary Phile 10.11.2014, 22:52~/somedir/dir3
после первогоpopd
? – ziyuang 19.02.2016, 00:03