Я пытаюсь найти способ захватить стандартный вывод для двух команд, которые выполняются подряд в одной строке.
Например, если у меня есть пустой файл с именем «practice.txt»:
echo Hello World; pwd >> practice.txt
Я хочу, чтобы файл теперь содержал:
Hello World
/home/sean
Я не уверен, что это уже часто задаваемый вопрос или нет, но после быстрого поиска я не смог найти никого, кто бы спрашивал. Любая помощь будет оценена по достоинству.
Если вы хотите запустить его только один раз, рассмотрите подоболочку
( echo "Hello World" ; pwd ) >> practice.txt
Если вы планируете запустить коллекцию несколько раз (возможно, объявив что-то полезное в файле .*rc
вашей оболочки), вы можете поместить оба вызова в функцию
fn() {
echo "Hello World"
pwd
}
Это также можно сделать в одной строке
% fn() { echo "Hello World" ; pwd }
% fn >> practice.txt
% cat practice.txt
Hello World
/home/sean
хммм - это трудно понять без символов новой строки, но в 3-м примере %
указывает на приглашение оболочки (zsh в моем случае). Однако может случиться так, что #!/usr/bin/bash
не существует и откатывается к другой оболочке (например, sh
) .. есть ли у shellcheck понимание?
Я нашел проблему. В скрипте bash "{}" должны быть на отдельных строках. Спасибо за помощь.
@pink_floyd668 ахах / извините! он ожидает завершающий ;
, чтобы закончить утверждение: fn() { echo test;}
Я также получаю ту же ошибку, используя
fn() { echo "Hello World" ; pwd} fn >> logs/trial1.txt
, которые находятся в сценариях. Работает из кли.