0

I need to create bash script file, which after its launch does following.

1) Suppose after launching the script I enter the text 'abc'. Then the script must automatically generate commands

cat text.txt
echo '123' > text.txt
echo 'abc' >>text.txt
echo '456' >>text.txt

2) After doing that I need to execute some commands (like compile the program etc.).

How to create bash script which executes these tasks?

  • 1
    You'll probably want to look at manual the bash builtin read and the -n flag for echo. But take a look at sed and rethink your concept as loading your phrase into a variable, say $NEW, and then running sed 's/123456/123'"$NEW"'456' Which probably has it own issues, especially if $NEW gets a slash inside it, but its a first step. – infixed May 24 '16 at 15:34
1

If the top and bottom are fixed, it can be something like:

cat top.txt /dev/stdin bottom.txt > text.txt 
# with cat, - works the same as /dev/stdin

or

{ 
  echo 123 #top.txt
  cat
  echo 456 #bottom.txt
} > text.txt 

followed by your compilation commands

cat top.txt /dev/stdin bottom.txt > text.txt
gcc whatever 

The first line should be a shebang line specifying your interpreter, unless you're OK with /bin/sh

 #!/bin/bash
 cat top.txt /dev/stdin bottom.txt > text.txt
 gcc whatever

If you then mark the script executable with chmod +x the_script, ./the_script will be equivalent to /bin/bash ./the_script.

If you want the scrip to abort a command fails, start it with set -e (or make the shebang line (#!/bin/bash -e).

Edit:

cat expects a whole file (until you enter ctr-d -- the end of file marker). If you want just one line, you can do read -r something; printf '%s\n' "$something" or head -n1.

You can read the help pages of the commands with man $command or help $command.

  • Thank You very much! But when I launch 'cat top.txt /dev/stdin bottom.txt > text.txt', it doesn't execute (i.e, it enters the input mode, I enter something and write "Enter", but it doesn't going out the input mode). What is the problem? – John Taylor May 24 '16 at 15:41
  • Oh, cat expects a whole file (until you enter ctr-d -- the end of file marker). If you want just one line, you can do read -r something; printf '%s\n' "$something" or head -n1. – PSkocik May 24 '16 at 15:44
  • Thank You one more! And, if You please, may I ask You about details of Your answer, if I'll stuck? – John Taylor May 24 '16 at 15:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.