hi ı am triying to take the data of files in a folder with system function this is the code
char path[100],command[120];
scanf("%s",&path);
sprintf(command,"echo $(ls %s) > something.txt",path);
system(command);
but when I look to the something.txt there is no new line. This is the output, all on one line with many file names omitted:
acpi adjtime adobe apparmor.d arch-release asound.conf ati at-spi2 avahi bash.bash_logout ... wpa_supplicant X11 xdg xinetd.d xml yaourtrc
I did try -e
-E
-n
options of echo but it didn't work. How to make a new line after each of these files?
There is one new line, which is to be expected. The
echo
command prints all its arguments on a single line separated by spaces, which is the output you see.You need to execute the result of:
to preserve the newlines in the
ls
output. See Capturing multiple-line output to a Bash variable.Use:
Of course, the
echo
is redundant; it would be better simply to run:and hence:
If you keep the echo, you should worry about the fact that you have more than 20 extra characters in the format string so the 120 should be more like 130 if not 140.
You should also use
scanf("%99s", path)
(no ampersand; add length limiting), and ideally check that it worked (if (scanf(...) == 1) { ... OK ... }
).