find -exec How to add additional parameter when calling a funtion


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting find -exec How to add additional parameter when calling a funtion
# 1  
Old 10-09-2017
find -exec How to add additional parameter when calling a funtion

Hello

Current working script is :
Code:
#
# my_script  BEGIN
#

function a_function {

FIRST_PARAM="$1"

DO_SOMETHING "$FIRST_PARAM"

}

export -f  a_function

START_HERE="/home/some_user/Documents"
find $START_HERE"  -exec bash -c 'a_function "$0" ' {}   \;

#
# my_script  END
#

What I need is to have two more parameters in the called function :
Code:
#
# my_script_not working  BEGIN
#

function a_function {

FIRST_PARAM="$1"
SECOND_PARAM="$2"
THIRD_PARAM="$3"

DO_SOMETHING "$FIRST_PARAM" "$SECOND_PARAM" "$THIRD_PARAM"

}

export -f  a_function

START_HERE="/home/some_user/Documents"
VARIABLE_1="VALUE_1"
VARIABLE_2="VALUE_2"

find $START_HERE"  -exec bash -c 'a_function "$0" ' {}  "$VARIABLE_1"   "$VARIABLE_2" \;

#
# my_script_not working   END
#

I have tried to replace " by '
I have tried to remove or not "$0"
I have tried to put "$VARIABLE_1" "$VARIABLE_2" before or after {}

Any help is welcome
# 2  
Old 10-09-2017
Check your quoting... i.e. double quote the entire construct.
# 3  
Old 10-09-2017
Quote:
Originally Posted by RudiC
Check your quoting... i.e. double quote the entire construct.
I tried different things but no way.

Code:
#find $START_HERE" -exec bash -c 'a_function "$0" {}  $VARIABLE_1  $VARIABLE_2' \; 

#find $START_HERE" -exec bash -c 'a_function {}  $VARIABLE_1  $VARIABLE_2' \; 

#find $START_HERE" -exec bash -c 'a_function ' "$VARIABLE_1" "$VARIABLE_2" _ {} \; 

#find $START_HERE" -exec bash -c 'a_function  "$0" "$VARIABLE_2"  "$VARIABLE_1"'  _ {} \; 

#find $START_HERE" -exec bash -c 'a_function {}  "$VARIABLE_2"  "$VARIABLE_1"' \; 

#find $START_HERE" -exec bash -c 'a_function '  "{} $VARIABLE_2  $VARIABLE_1" \;

#find $START_HERE" -exec bash -c 'a_function  "$VARIABLE_2"  "$VARIABLE_1"'  __ {}  \;

#find $START_HERE" -exec bash -c 'a_function  "$0" '  "{}  $VARIABLE_2  $VARIABLE_1" \;

#find $START_HERE" -exec bash -c 'a_function  '  "{}  $VARIABLE_2  $VARIABLE_1" \;

#find $START_HERE" -exec bash -c 'a_function  '  {}  "$VARIABLE_2"  "$VARIABLE_1"  \;

#find $START_HERE" -exec bash -c 'a_function  '  "$VARIABLE_2"  "$VARIABLE_1"  {}  \;

#find $START_HERE"  -exec bash -c 'a_function  "$0" ' {}  "$VARIABLE_1"   "$VARIABLE_2" \;

# 4  
Old 10-09-2017
Hi.

Does this demonstration help?
Code:
#!/usr/bin/env bash

# @(#) s1       Demonstrate calling function from find -exec.

# Utility functions: print-as-echo, print-line-with-visual-space, debug.
# export PATH="/usr/local/bin:/usr/bin:/bin"
LC_ALL=C ; LANG=C ; export LC_ALL LANG
pe() { for _i;do printf "%s" "$_i";done; printf "\n"; }
pl() { pe;pe "-----" ;pe "$*"; }
em() { pe "$*" >&2 ; }
db() { ( printf " db, ";for _i;do printf "%s" "$_i";done;printf "\n" ) >&2 ; }
db() { : ; }
C=$HOME/bin/context && [ -f $C ] && $C

function a_function {

FIRST_PARAM="$1"
SECOND_PARAM="$2"
THIRD_PARAM="$3"
fourth="$4"

echo DO_SOMETHING "$FIRST_PARAM" "$SECOND_PARAM" "$THIRD_PARAM" "$fourth"

}

pl " Current files f?:"
echo f?

export -f  a_function

START_HERE="/home/some_user/Documents"
VARIABLE_1="VALUE_1"
VARIABLE_2="VALUE_2"

pl " Results:"
# find $START_HERE"  -exec bash -c 'a_function "$0" ' {}  "$VARIABLE_1"   "$VARIABLE_2" \;
find .  -name 'f?' -exec bash -c "a_function $0 {}  $VARIABLE_1 $VARIABLE_2" \;

producing:
Code:
$ ./s1

Environment: LC_ALL = C, LANG = C
(Versions displayed with local utility "version")
OS, ker|rel, machine: Linux, 3.16.0-4-amd64, x86_64
Distribution        : Debian 8.9 (jessie) 
bash GNU bash 4.3.30

-----
 Current files f?:
f1 f2 f3

-----
 Results:
DO_SOMETHING ./s1 ./f1 VALUE_1 VALUE_2
DO_SOMETHING ./s1 ./f2 VALUE_1 VALUE_2
DO_SOMETHING ./s1 ./f3 VALUE_1 VALUE_2

I used local directory with only f* files for brevity.

Best wishes ... cheers, drl
This User Gave Thanks to drl For This Post:
# 5  
Old 10-10-2017
Quote:
Originally Posted by drl
Hi.

Does this demonstration help?
Code:
.....
.....
.....
find .  -name 'f?' -exec bash -c "a_function $0 {}  $VARIABLE_1 $VARIABLE_2" \;
.....
.....
.....

Ok that the trick.
But I have read that it is a bad idea to put {} between quote inside the caller ?

The following work also but the data return by {} is found at $0 in the function.
Code:
find .  -name 'f?' -exec bash -c "a_function  $VARIABLE_1 $VARIABLE_2"  {} \;

As far you know that, it is not a problem.

Thank you very much for helping.
# 6  
Old 10-10-2017
Hi, jcdole

You're welcome.
Quote:
Originally Posted by jcdole
But I have read that it is a bad idea to put {} between quote inside the caller ?
Where did you see this? The reading I have done suggests that {} may need to be placed within quotes to protect them from evaluation by the shell that is running the find command.

Best wishes ... cheers, drl
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. AIX

Add additional swap place on AIX server

Can anyone help me the detailed procedure and commands to follow to add additional swap on aix server . My system shows following as of now , #lsattr -E -l sys0 -a realmem realmem 13893632 Amount of usable physical memory in Kbytes False #pstat -s PAGE SPACE: USED PAGES FREE... (7 Replies)
Discussion started by: gull05
7 Replies

2. Shell Programming and Scripting

find: missing argument to `-exec' while redirecting using find in perl

Hi Friends, Please help me to sort out this problem, I am running this in centos o/s and whenever I run this script I am getting "find: missing argument to `-exec' " but when I run the same code in the command line I didn't find any problem. I am using perl script to run this ... (2 Replies)
Discussion started by: ramkumarselvam
2 Replies

3. Ubuntu

Find and EXEC

This is a huge issue. and I need it fixed ASAP. account-system gate-system race_traffic_sensor achievement-system global race_voicepack admin glue-system realdriveby admin-system gps realism-system... (5 Replies)
Discussion started by: austech360
5 Replies

4. Shell Programming and Scripting

add a additional column in csv file

Thanks for allwoing me to discuss in this forum GIVEN BELOW A simple shell script which will ask for the user to input a PC name and it will produce the output in CSV with the PC name #! /bin/bash read -p "enter the PC name :" pc #checking for netstat report netstat -pant |sed '1,2d'... (1 Reply)
Discussion started by: ayyappancheta
1 Replies

5. AIX

How to add/remove additional DNS and IP to AIX

Hello, How to add/remove additional DNS and IP to AIX ? I wanted to add 3 more new DNS and IP addresses to existing AIX 5.2. (1 Reply)
Discussion started by: balareddy
1 Replies

6. UNIX for Dummies Questions & Answers

Find Exec

Hello All, Is there a way to make exec do a couple of operations on a single input from find? For example, find . -type d -exec ls -l "{}" ";" I would like to give the result of each "ls -l" in the above to a wc. Is that possible? I want to ls -l | wc -l inside... (1 Reply)
Discussion started by: prasanna1157
1 Replies

7. Shell Programming and Scripting

Add additional numbers to file

I need to change the following field from: "7/3/2009 7:07:12 PM","12345676","ok","8674" "6/3/2009 8:07:12 PM","12345676","ok","8674" "5/1/2009 7:07:12 PM","12345676","ok","8674" "4/9/2009 3:07:12 AM","12345676","ok","8674" "3/8/2009 3:07:12 PM","12345676","ok","8674" "2/7/2009 4:07:12... (10 Replies)
Discussion started by: Pablo_beezo
10 Replies

8. Shell Programming and Scripting

| with find -exec

can we use |(pipe operator) with find -exec.....? or can pipe the output of find command to another command...? if not, why...? pls explain (3 Replies)
Discussion started by: vijay_0209
3 Replies

9. Shell Programming and Scripting

Passing a parameter while calling a script

Hello everyone I was asked to pass a parameter in the calling of a script. IŽll have two parameters London and Birmingham and IŽll need to pass this because each of these will have a specific script however with the same name. /home/script/loaddata.ksh Lond /home/script/loaddata.ksh Birm... (2 Replies)
Discussion started by: Rafael.Buria
2 Replies

10. Shell Programming and Scripting

pass parameter back to calling program

Hi all, I am running AIX version 4. I have a shell script that is calling another script. I want the called script to obtain a value and pass it back to the calling script. So far, I know that to pass a parameter to a called script is as such: sh proc2.sh $1 $2 etc. What I don't know how... (11 Replies)
Discussion started by: jthomas
11 Replies
Login or Register to Ask a Question

Featured Tech Videos