We help IT Professionals succeed at work.

Script format question

Helixx
Helixx asked
on
390 Views
Last Modified: 2012-05-10
I am creating a script to write zero data to a CF card (Don't ask.  It's stupid but I have to do it anyway)  

sudo watch dd if=/dev/zero of=/dev/sdb bs=4k > mylog & tail mylog

My question is three parts.  

1)  Using the line above, why does the dd action stop?  If I take the " & tail mylog" off, it works and writes to the file just fine.

2)  Why can I not get this to run in a script from a desktop icon?

3)  Is there a better way to do this?  It has to be easy for the end user so the hope would be a double click on the desktop icon, password for sudo is fine and then the process runs with an easy to read status.

I have several more action icons to make after this one so hopefully this will get me on the right track.

Thanks all!
Comment
Watch Question

CERTIFIED EXPERT
Distinguished Expert 2019
Commented:
This one is on us!
(Get your first solution completely free - no credit card required)
UNLOCK SOLUTION

Author

Commented:
Okay.  I see where you are going with this but it still does not show the status.  Just a blank screen while the dd runs.  This is an Ubuntu machine if that makes any difference.
CERTIFIED EXPERT
Most Valuable Expert 2013
Top Expert 2013
Commented:
This one is on us!
(Get your first solution completely free - no credit card required)
UNLOCK SOLUTION

Author

Commented:
That didn't work either.  I just get a blank white background terminal screen after I type in the sudo password.  Once I type CTRL+C the screen disappears.  I do see dd running in another window using top.

I really like the look of pv and have been trying to get that to work.  So far I have this:

echo 'z,,,1234' | sudo -S dd if=/dev/zero bs=10M | pv -s 16G -N dd | echo 'z,,,1234' | sudo -S dd bs=10M of=/dev/sdb

It took me awhile to figure out that I would need to echo the password twice.  I get no error but it also doesn't do much.
administrator@kiosk1:~$ echo '123456' | sudo -S dd if=/dev/zero bs=10M | pv -s 16G -N dd | echo '123456' | sudo -S dd bs=10M of=/dev/sdb0+1 records in0+1 records out9 bytes (9 B) copied, 0.0048828 s, 1.8 kB/s       dd:    0B 0:00:00 [   0B/s ] [>                        ]  0%            administrator@kiosk1:~$

I think sudo may be my problem.  I remember a few version ago where you could sudo su and be done with it.  I know the dangers but this PC will not be on the network and will only be used by IT folks for a few specific tasks.
CERTIFIED EXPERT
Distinguished Expert 2019

Commented:
you may need to escape some parameters
xterm -e "sudo watch dd if=/dev/zero of=/dev/sdb bs=4k \> mylog \& tail mylog"

I.e. the & was sending "xterm -e "sudo watch dd if=/dev/zero of=/dev/sdb bs=4k \> mylog" into the background and there is no interface to run the tail mylog.

Author

Commented:
Still get the blank screen so I can't see the progress.
CERTIFIED EXPERT
Distinguished Expert 2019

Commented:
Is the mylog file gets created? This will at least deal with whether the program runs.

xterm -e "sudo watch dd if=/dev/zero of=/dev/sdb bs=4k \\> mylog \\& tail mylog"

You may have to add another escape if this does not work.
xterm -e "sudo watch dd if=/dev/zero of=/dev/sdb bs=4k \\\> mylog \\\& tail mylog"

Author

Commented:
Okay guys.  I got it working.  I really wanted to use pv as it has a much easier to read output but the sudo chaining was causing issues so this is what I ended up doing.  Also note, this takes the echo of the password out of the script so a little better security for when it matters.

  1. sudo passwd root // I wanted to get away from sudo and back to a su environment.
  2. xterm -e su -c 'bash /home/administrator/Desktop/clean.sh && bash'   // I
    added the su to the launcher.  Don't forget that the path will change so add back the full path to the script.
  3. below is the finished clean.sh listed above.
#!/bin/bash

echo "WARNING!! CF card will be wiped!"
echo "ALL DATA WILL BE LOST!"
echo "Press CTRL+C to stop this process now"

sleep 10

dd if=/dev/zero bs=10M | pv -s 16G -N dd | dd bs=10M of=/dev/sdb

echo "clean complete"

sleep 5


Thank you all for your help and I hope this helps someone else.

Author

Commented:
I finally figured it out but not without the help of these guys.
CERTIFIED EXPERT
Distinguished Expert 2019

Commented:
The alternative is that you can use suid to set the permission on the script to run with owner's rights.

i.e. root owned script with chmod 2755 thisscript.
The user would not need to know the su - password nor have rights to sudo.

Gain unlimited access to on-demand training courses with an Experts Exchange subscription.

Get Access
Why Experts Exchange?

Experts Exchange always has the answer, or at the least points me in the correct direction! It is like having another employee that is extremely experienced.

Jim Murphy
Programmer at Smart IT Solutions

When asked, what has been your best career decision?

Deciding to stick with EE.

Mohamed Asif
Technical Department Head

Being involved with EE helped me to grow personally and professionally.

Carl Webster
CTP, Sr Infrastructure Consultant
Empower Your Career
Did You Know?

We've partnered with two important charities to provide clean water and computer science education to those who need it most. READ MORE

Ask ANY Question

Connect with Certified Experts to gain insight and support on specific technology challenges including:

  • Troubleshooting
  • Research
  • Professional Opinions
Unlock the solution to this question.
Join our community and discover your potential

Experts Exchange is the only place where you can interact directly with leading experts in the technology field. Become a member today and access the collective knowledge of thousands of technology experts.

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.