Sponsored Content
Top Forums UNIX for Beginners Questions & Answers Using read to assign value to bash variable not working Post 303043533 by Chubler_XL on Thursday 30th of January 2020 09:04:36 PM
Old 01-30-2020
This is because commands within a pipeline are run in subshells so the read statement is setting the variables is a subshell which has not impact on the main shell.

You can achieve what you want using process substitution like this:

Code:
# read var1 var2 < <(openstack hypervisor stats show | awk -F'|' 'NR==14{print $2,$3}')
# echo $var1
vcpus

Edit:
Also in bash 4.* and later you can use a shell option to run the last pipeline command in the current shell.
Note this only work for shells without job control, so in an interactive shell (as opposed to a script) you will also need turn off job control (set +m).

Quote:
lastpipe
If set, and job control is not active, the shell runs the last command of a pipeline
not executed in the background in the current shell environment.
Code:
# echo $BASH_VERSION
5.0.7(1)-release
# shopt -s lastpipe
# set +m

# echo A B C | head -1 | read first second rest
# echo $first
A

# set -m
# shopt -u lastpipe


Last edited by Chubler_XL; 01-30-2020 at 10:25 PM..
These 2 Users Gave Thanks to Chubler_XL For This Post:
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

assign value to variable is not working

Hi :) The next script campares two files File1-Line1 vs File2-Line1, File1-Line1 vs File2-Line2... only if line contains "AS-", if LineX is not in File2 writes in aux, but "valor" is allways=1 never changes! :confused: What is wrong? valor changes to 0 before break, after brake is again 1 ... (3 Replies)
Discussion started by: agustincm
3 Replies

2. UNIX for Dummies Questions & Answers

How to Read a config file and Assign to Variable

I have removeConfig file, it contains the dir paths for removing. I need to read line by line and assign to variable. any idea? (1 Reply)
Discussion started by: redlotus72
1 Replies

3. Shell Programming and Scripting

read and assign each character from the string to a variable

How... can I read input by a user character by cahracter. And assign each character from the string to a variable? Any help would be greatly appreciated! Thank you! (1 Reply)
Discussion started by: Tek-E
1 Replies

4. Shell Programming and Scripting

Assign bash command to variable

Hi I am trying to write a function that needs to be able to assign the last run shell command to a variable. The actual command string itself not the exit code of the command. I am using the bash command recall ability to do this as follows: alias pb='ps | grep ash' ... (3 Replies)
Discussion started by: Moxy
3 Replies

5. Shell Programming and Scripting

Read a file and assign the values to a variable

i have a file in this format curyymm PRVYYMM CDDMmmYY bddMmmyy eddMmmyy --------- ------- ------------ ---------- ----------- 0906 0905 09Jun09 01Jun09 30Jun09 ----------- --------- ------------ ------------ ----------- i need to read the... (5 Replies)
Discussion started by: depakjan
5 Replies

6. Shell Programming and Scripting

Read the csv file and assign the values in to variable

I have a csv file with the values seperated by commas.I want to extract these values one by one and assign to a variable using shell script.Any ideas or code? (11 Replies)
Discussion started by: rajbal
11 Replies

7. Shell Programming and Scripting

How to write script read file and assign it as variable?

Hi all, I want write a csh script which must be able: 1.read a file 2.assign value in file as variable and can i use read in csh script? thx (2 Replies)
Discussion started by: proghack
2 Replies

8. Shell Programming and Scripting

Bash assign string to variable

Hi ,I am trying to assign string to variable ,but it doesn't work Also could you show me different ways to use grep,(I am trying to get the first,second and first column form file,and I am counting the chars) let name=`grep "$id" product | cut -c6-20` (25 Replies)
Discussion started by: lio123
25 Replies

9. UNIX for Advanced & Expert Users

How to read a text file and assign the values in the same to a variable in loop

Hi, I have a text file with multiple lines, each having data in the below format <DOB>,<ADDRESS> I have to write a script which reads each line in the text file in loop, assign the values to these variables and do some further processing in it. Using the following code prints the values... (12 Replies)
Discussion started by: manishab00
12 Replies

10. Shell Programming and Scripting

Do While Loop + Read From File + assign line to a variable

Hello, I am using below code for reading from a file and assigning the values to a variable , but it is loosing the value after the loop , please suggest to retain the value of the variable after the loop , while IFS=: read -r line do set $dsc=$line echo 'printing line variable ' $line... (1 Reply)
Discussion started by: ParthThakkar
1 Replies
SH(1)							      General Commands Manual							     SH(1)

NAME
sh, ., break, case, cd, continue, eval, exec, exit, export, for, if, read, readonly, set, shift, trap, umask, wait, while - shell SYNOPSIS
sh [-eiknqstvxu] [-c str] [file] OPTIONS
-c Execute the commands in str -e Quit on error -i Interactive mode; ignore QUIT, TERMINATE, INTERRUPT -k Look for name=value everywhere on command line -n Do not execute commands -q Change qflag from sig_ign to sig_del -s Read commands from standard input -t Exit after reading and executing one command -v Echo input lines as they are read -x Trace -u Unset variables EXAMPLES
sh script # Run a shell script DESCRIPTION
Sh is the shell, which forms the user's main interface with the system. On startup, the shell reads /etc/profile and $HOME/.profile, if they exist, and executes any commands they contain. The Minix shell has most of the features of the V7 (Bourne) shell, including redirect- ion of input and output, pipes, magic characters, background processes, and shell scripts. A brief summary follows, but whole books have been written on shell programming alone. Some of the more common notations are: date # Regular command sort <file # Redirect stdin (standard input) sort <file1 >file2 # Redirect stdin and stdout cc file.c 2>error # Redirect stderr a.out >f 2>&1 # Combine standard output and standard error sort <file1 >>file2 #Append output to file2 sort <file1 >file2 & #Background job (ls -l; a.out) & # Run two background commands sequentially sort <file | wc # Two-process pipeline sort <f | uniq | wc # Three-process pipeline ls -l *.c # List all files ending in .c ls -l [a-c]* # List all files beginning with a, b, or c ls -l ? # List all one-character file names ls ? # List the file whose name is question mark ls '???' # List the file whose name is three question marks v=/usr/ast # Set shell variable v ls -l $v # Use shell variable v PS1='Hi! ' # Change the primary prompt to Hi! PS2='More: ' # Change the secondary prompt to More: ls -l $HOME # List the home directory echo $PATH # Echo the search path echo $? # Echo exit status of previous command in decimal echo $$ # Echo shell's pid in decimal echo $! # Echo PID of last background process echo $# # Echo number of parameters (shell script) echo $2 # Echo second parameter (shell script) echo "$2" # Echo second parameter without expanding spaces echo $* # Echo all parameters (shell script) echo $@ # Echo all parameters (shell script) echo "$@" # Echo all parameters without expanding spaces The shell uses the following variables for specific purposes: SHELL the path of the current shell HOME the default value for the cd(1) command PATH the directories to be searched to find commands IFS the internal field separators for command strings PS1 the primary shell prompt PS2 the secondary shell prompt There are various forms of substitution on the shell command line: `...` Command string between back-quotes is replaced by its output "..." Permits variable substitution between quotes '...' Inhibits variable substitution between quotes $VAR Replaced by contents of variable VAR ${VAR} Delimits variable VAR from any following string The expressions below depend on whether or not VAR has ever been set. If VAR has been set, they give: ${VAR-str} Replace expression by VAR, else by str ${VAR=str} Replace expression by VAR, else by str and set VAR to str ${VAR?str} Replace expression by VAR, else print str and exit shell ${VAR+str} Replace expression by str, else by null string If a colon is placed after VAR, the expressions depend on whether or not VAR is currently set and non-null. The shell has a number of built-in commands: : return true status . fn execute shell script fn on current path break [n] break from a for, until or while loop; exit n levels continue [n] continue a for, until or while loop; resume nth loop cd [dir] change current working directory; move to $HOME eval cmd rescan cmd, performing substitutions eval rescan the current command line exec cmd execute cmd without creating a new process exec <|> with no command name, modify shell I/O exit [n] exit a shell program, with exit value n export [var] export var to shell's children; list exported variables pwd print the name of the current working directory read var read a line from stdin and assign to var readonly [var] make var readonly; list readonly variables set -f set shell flag (+f unsets flag) set str set positional parameter to str set show the current shell variables shift reassign positional parameters (except ${0}) one left times print accumulated user and system times for processes trap arg sigs trap signals sigs and run arg on receipt trap list trapped signals umask [n] set the user file creation mask; show the current umask wait [n] wait for process pid n; wait for all processes The shell also contains a programming language, which has the following operators and flow control statements: # Comment The rest of the line is ignored = Assignment Set a shell variable && Logical AND Execute second command only if first succeeds || Logical OR Execute second command only if first fails (...) Group Execute enclosed commands before continuing for For loop (for ... in ... do ... done) case Case statement ((case ... ) ... ;; ... esac) esac Case statement end while While loop (while ... do ... done) do Do/For/While loop start (do ... until ...) done For/While loop end if Conditional statement (if ... else ... elif ... fi) in For loop selection then Conditional statement start else Conditional statement alternative elif Conditional statement end until Do loop end fi Conditional statement end SEE ALSO
echo(1), expr(1), pwd(1), true(1). SH(1)
All times are GMT -4. The time now is 04:30 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy