Я пытался использовать команду как
cp `ls ~/temp/*.xyz | head -1` ./
Но это не работает. Если я повторяю значение команды в задних галочках и помещаю его вручную в CP, управляют, чтобы это работало. Какие-либо идеи?
Текст производится обратными галочками (или альтернативный синтаксис $(…)
), как текст, следующий из замены переменной ($foo
), расширен оболочкой: это повреждается в слова, и слова интерпретируются как шаблоны шарика (т.е. \[?*
действуйте для соответствия файлам). Для предотвращения этой проблемы всегда используйте двойные кавычки вокруг переменной и управляйте заменами.
Существует второй выпуск: парсинг вывода ls
плохая идея по различным причинам.
Если Вы используете zsh в качестве своей оболочки, простой способ сделать то, чего Вы делаете попытку,
cp ~/temp/*.xyz([1]) ./
На других оболочках это более твердо. На командной строке Вы могли бы рискнуть использовать ls
, если Вы знаете, что Ваш файл не содержит непечатаемого символа (для ls
определение непечатаемых). В сценарии это призывает к аварии; простой с двумя лайнерами в ksh или ударе
tmp=(~/temp/*.xyz)
cp -- "${a[0]}" ./
На других оболочках можно сделать это этот путь (обратите внимание, что это перезаписывает позиционные параметры):
set -- ~/temp/*.xyz
cp -- "$1" ./