Sponsored Content
Top Forums Shell Programming and Scripting sed not outputing variable into new file Post 302795497 by Don Cragun on Thursday 18th of April 2013 01:05:39 AM
Old 04-18-2013
If what you are trying to do is to create a directory and create a script (test3.sh) that is a copy of another script (test2.sh) with an mv command added after line 36 then I think the following does what you want. You haven't said what shell you're trying to use for this script, so I'm assuming a standards conforming shell such as ksh or bash. (I used ksh while I was testing this script.) Assuming that is correct, there are a couple of problems:
  1. You can't have a minus sign in a function name. (I changed create-new to create_new to solve this problem.)
  2. It is hard to get the quotes correct using sed to transform test2.sh into test3.sh. (In this case I found it much easier to use a here-document with ed instead of trying to get the editing command arguments specified correctly with sed.)
  3. I added an additional case to provide a usage message (since I kept forgetting to add arguments while I was testing the script.
  4. I added matching ('s to the cases in your switch because I use showmatch while editing scripts and I find it easier to read when I do that.
Anyway, does this do what you're trying to do?
Code:
#!/bin/ksh
bar=to #Added because the script needs a value for bar
foo=from #Added because the script needs a value for foo
me=${0##*/} #Added for use in the usage message
SHOW="$2"

create_new(){
        mkdir "$bar/$SHOW"
        ed -s test2.sh <<-EOF
                36a
                mv -v "$foo/$SHOW" "$bar/$SHOW/"
                .
                w test3.sh
        EOF
}

case "$1" in
        (create)
                create_new ;;
        (remote)
                remove ;;
        (*)     printf "Usage:\t%s create file\n\t%s remove Who Knows What\n" \
                        "$me" "$me" ;;
esac

If not, you're going to have to actually show us exactly what you want to appear in test3.sh rather than showing us the commands that you're using to create a test3.sh that does not contain what you want.

I also note that your script has a case "remote" that calls the undefined function "remove". I assume one of these is misspelled, but since you haven't given us any indication of what should happen when $1 is not "create", I left it as is.
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

outputing sed to a variable

Hello, My appologies for asking a very basic question but... In a shell, I enter: echo tit | sed -e s/tit/tat/g This returns: tat as expected. But when I enter: set test = `echo tit | sed -e s/tit/tat/g` echo $test This returns an empty line. Why is this so and how... (3 Replies)
Discussion started by: flewis
3 Replies

2. Shell Programming and Scripting

sed -i '7 c\$variable' file ....(?!@#$%^&*!)

I have tried everything I can think of to get sed to change line N of a file to the contents of a variable. I have Googled the Internet, and I find lots of people telling how to use variables with the "Substitute" command, but no one telling how to use variables with the "Change" command. I... (4 Replies)
Discussion started by: Mr.Lauren
4 Replies

3. Shell Programming and Scripting

Having sed to read lines of a file with the use of a variable..Possible?

This i will print the second line of a file sed -n '2p' test2 The use of a variable is impossible here. a=1 while ; do line=`sed -n '$a p' test2` # do some things here with the line variable a=`expr $a + 1` done But the uotput of sed command is 'p'..... What can i do to use a variable... (2 Replies)
Discussion started by: hakermania
2 Replies

4. Shell Programming and Scripting

using file-and-replace sed command with the use of a variable?

Ok, so, let's say I have the variable $GMAILID....How can I use it with sed command so to replace a string in a file? e.g.: sed -i 's/$GMAILID/test@gmail.com/' /home/$USER/Desktop/sendmail (4 Replies)
Discussion started by: hakermania
4 Replies

5. Red Hat

How to pass value of pwd as variable in SED to replace variable in a script file

Hi all, Hereby wish to have your advise for below: Main concept is I intend to get current directory of my script file. This script file will be copied to /etc/init.d. A string in this copy will be replaced with current directory value. Below is original script file: ... (6 Replies)
Discussion started by: cielle
6 Replies

6. Shell Programming and Scripting

How to replace a string with a variable in a file using sed?

I have a file having some text like: PATH_ABC=/user/myLocation I have to replace "/user/myLocation" with a session variable say, $REPLACE_PATH, where $REPLACE_PATH=/user/myReplaceLocation The following sed command is not working. It is writing PATH_ABC=$REPLACE_PATH in the file ... (2 Replies)
Discussion started by: SKhan
2 Replies

7. Shell Programming and Scripting

sed replacement in file when line is in a variable

Hi, I have a file where I want to replace the 15th field separated by comma, only on specific lines matching lots of different conditions. I have managed to read the file line by line, within the loop my line is held in a variable called $line I assume this will be using sed (maybe... (5 Replies)
Discussion started by: jpt123
5 Replies

8. Shell Programming and Scripting

sed and variable as target file

for file in `ls /tmp/*_sw_list`; do /usr/bin/sed -i '' '1,/^Software\ Update/d' $file done In my script, this doesn't work. I can copy-and-paste it, and it works. Enabling debugging shows it is resolving the file name correctly... it isn't an issue with special characters in the filename. ... (3 Replies)
Discussion started by: jnojr
3 Replies

9. Shell Programming and Scripting

Using echo, grep and wc and outputing to text file

My current line command is as follows: echo -n "text: " ; grep "blah text" ../dir1/filename | wc -l The output to the screen is as needed, but how do I print to a text file? (9 Replies)
Discussion started by: ncwxpanther
9 Replies

10. UNIX for Beginners Questions & Answers

Awk/sed to replace variable in file

Hi All I have one file with multiple lines in it, each line has static text and some variable enclosed in <<filename>> as well. e.g. as below 123, <<file1.txt>> this is my name, I stay at <<city.txt>> Thanks for visiting 348384y, this is my name <<fileabc.txt>>, I stay at near the mall of... (8 Replies)
Discussion started by: reldb
8 Replies
WDMD(8) 						      System Manager's Manual							   WDMD(8)

NAME
wdmd - watchdog multiplexing daemon SYNOPSIS
wdmd [OPTIONS] DESCRIPTION
This daemon opens /dev/watchdog and allows multiple independent sources to detmermine whether each KEEPALIVE is done. Every test interval (10 seconds), the daemon tests each source. If any test fails, the KEEPALIVE is not done. In a standard configuration, the watchdog timer will reset the system if no KEEPALIVE is done for 60 seconds ("fire timeout"). This means that if a single test fails 5-6 times in row, the watchdog will fire and reset the system. With multiple test sources, fewer separate failures back to back can also cause a reset, e.g. T seconds, P pass, F fail T00: test1 P, test2 P, test3 P: KEEPALIVE done T10: test1 F, test2 F, test3 P: KEEPALIVE skipped T20: test1 F, test2 P, test3 P: KEEPALIVE skipped T30: test1 P, test2 F, test3 P: KEEPALIVE skipped T40: test1 P, test2 P, test3 F: KEEPALIVE skipped T50: test1 F, test2 F, test3 P: KEEPALIVE skipped T60: test1 P, test2 F, test3 P: KEEPALIVE skipped T60: watchdog fires, system resets (Depending on timings, the system may be reset sometime shortly before T60, and the tests at T60 would not be run.) A crucial aspect to the design and function of wdmd is that if any single source does not pass tests for the fire timeout, the watchdog is guaranteed to fire, regardless of whether other sources on the system have passed or failed. A spurious reset due to the combined effects of multiple failing tests as shown above, is an accepted side effect. The wdmd init script will load the softdog module if no other watchdog module has been loaded. wdmd cannot be used on the system with any other program that needs to open /dev/watchdog, e.g. watchdog(8). Test Source: clients Using libwdmd, programs connect to wdmd via a unix socket, and send regular messages to wdmd to update an expiry time for their connection. Every test interval, wdmd will check if the expiry time for a connection has been reached. If so, the test for that client fails. Test Source: scripts wdmd will run scripts from a designated directory every test interval. If a script exits with 0, the test is considered a success, other- wise a failure. If a script does not exit by the end of the test interval, it is considered a failure. OPTIONS
--version, -V Print version. --help, -h Print usage. --dump, -d Print debug information from the daemon. --probe, -p Print path of functional watchdog device. Exit code 0 indicates a functional device was found. Exit code 1 indicates a functional device was not found. -D Enable debugging to stderr and don't fork. -H 0|1 Enable (1) or disable (0) high priority features such as realtime scheduling priority and mlockall. -G name Group ownership for the socket. -S 0|1 Enable (1) or disable (0) script tests. -s path Path to scripts dir. -k num Kill unfinished scripts after num seconds. -w path The path to the watchdog device to try first. 2011-08-01 WDMD(8)
All times are GMT -4. The time now is 10:55 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy