Лучший способ сделать это с "$(command substitution)"
(спасибо, Landon):
ls > "$(pwd).txt"
Вы будете иногда также видеть, что люди используют более старую нотацию обратной галочки, но это имеет несколько недостатков с точки зрения вложения и выхода:
ls > "`pwd`.txt"
Примечание, что необработанная замена pwd
является полным путем, таким образом, вышеупомянутая команда создает файл с тем же именем в том же каталоге как рабочий каталог, но с .txt
расширение. Thomas Kammeyer указал, что basename
команда разделяет ведущий каталог, таким образом, это создало бы текстовый файл в текущем каталоге с названием того каталога:
ls > "$(basename "$(pwd)").txt"
Также благодаря erichui для перевода в рабочее состояние проблемы пробелов в пути.
Чтобы сделать буквально, что Вы сказали, Вы могли попробовать:
ls > `pwd`.txt
, который будет использовать полный путь, который должен быть прекрасным. Обратите внимание, если Вы делаете это в своем корневом каталоге, который мог бы быть в/home/hoboben, попытку создать /home/hoboben.txt, текстового файла в каталоге выше.
это, что Вы хотели?
, Если бы Вы хотели, чтобы каталог содержал файл, названный в честь него, Вы получили бы базовое имя текущего каталога и добавили бы это с .txt к pwd.
Теперь, вместо того, чтобы использовать команду pwd..., почему бы не использовать переменную среды PWD?
, Например:
ls > $PWD.txt
или
ls > ${PWD}.txt
, вероятно, что Вы пытались помнить со своим вторым примером.
, Если Вы находитесь в/home/hoboben и Вы хотите создать /home/hoboben/hoboben.txt, попробовать:
ls > ${PWD}/${PWD##*/}.txt
, Если бы Вы делаете это, файл будет содержать свое собственное имя, так чаще всего, Вы исправили бы это одним из нескольких способов. Вы могли перенаправить к где-то в другом месте и переместить файл или назвать файл, начинающийся с точки для сокрытия, это от ls управляет, пока Вы не используете флаг-a (и затем дополнительно переименовываете получающийся файл).
я пишу свои собственные сценарии для управления иерархией каталогов музыкальных файлов, и я использую подкаталоги, названные ".info", например, для содержания данных дорожки в некоторых запасных файлах (в основном, я "скрываю" метаданные этот путь). Это удается хорошо, потому что мои потребности просты и мой маленький набор.
Используя вышеупомянутый метод создаст файлы один уровень выше Вашего текущего каталога. Если бы Вы хотите списки воспроизведения всем, переходят к одному каталогу, как который необходимо было бы сделать что-то:
#!/bin/sh
MYVAR=`pwd | sed "s|/|_|g"`
ls > /playlistdir/$MYVAR-list.txt
Я подозреваю, что проблема может состоять в том, что существуют пробелы в одних из имен каталогов. Например, если Ваш рабочий каталог является "/home/user/music/artist именем". Bash будет перепутан, думая, что Вы пытаетесь перенаправить к/home/user/music/artist и name.txt. Можно зафиксировать это с двойными кавычками
ls > "$(pwd).txt"
кроме того, Вы не можете хотеть перенаправлять к $ (pwd) .txt. В примере выше, Вы перенаправили бы вывод в файл "/home/user/music/artist name.txt"
Синтаксис:
ls > `pwd`.txt
, Который является ''' символом под' ~ ', не регулярная одинарная кавычка.