Setting variable output from timeoutSetting a variable whose value depends on another variable“Expect” automation tool output to shell variableTimeout function return valueNFS caches expiring unexpectedlytimeout command and pipe - order of precedenceSetting jq output to a Bash VariableSetting Bash variable with osascript always incorrect.sed - calling a variable from a file with multilineTimeout command breaks command that expects inputWhere is TMOUT being set in CentOS 7? How can I disable it?
when is out of tune ok?
Sequence of Tenses: Translating the subjunctive
What is the difference between "behavior" and "behaviour"?
Opposite of a diet
How do scammers retract money, while you can’t?
Method to test if a number is a perfect power?
Return the Closest Prime Number
Type int? vs type int
How to check is there any negative term in a large list?
How does buying out courses with grant money work?
Two monoidal structures and copowering
How can a function with a hole (removable discontinuity) equal a function with no hole?
Purchasing a ticket for someone else in another country?
Customer Requests (Sometimes) Drive Me Bonkers!
How do I go from 300 unfinished/half written blog posts, to published posts?
Is there a problem with hiding "forgot password" until it's needed?
Hostile work environment after whistle-blowing on coworker and our boss. What do I do?
Is there a korbon needed for conversion?
Roman Numeral Treatment of Suspensions
What can we do to stop prior company from asking us questions?
Why not increase contact surface when reentering the atmosphere?
Do sorcerers' Subtle Spells require a skill check to be unseen?
Escape a backup date in a file name
How does Loki do this?
Setting variable output from timeout
Setting a variable whose value depends on another variable“Expect” automation tool output to shell variableTimeout function return valueNFS caches expiring unexpectedlytimeout command and pipe - order of precedenceSetting jq output to a Bash VariableSetting Bash variable with osascript always incorrect.sed - calling a variable from a file with multilineTimeout command breaks command that expects inputWhere is TMOUT being set in CentOS 7? How can I disable it?
I'm trying to automatically query a status via telnet (this isn't something I'm able to work around in this case). The idea is to grep for something and assign the result to a variable, to pass to a conditional statement later. The complication is the link to the target device may not be up, and therefore the script could hang indefinitely if not killed via a timeout.
This sets output
to what I'd expect, but does not handle the link being down:
output=$(telnet 1.2.3.4 1234 | grep "something")
This will spit out the expected output while handling the link being down:
timeout --signal=9 3 telnet 1.2.3.4 1234 | grep "something"
I can even direct the output to a file and the file will contain the output:
timeout --signal=9 3 telnet 1.2.3.4 1234 | grep "something" > /tmp/tmpfile.txt
Unfortunately rapid write/read of a file like this isn't an option because of how much it'll fill up log files.
But, when I try to combine everything, the variable doesn't set:
output=$(timeout --signal=9 3 telnet 1.2.3.4 1234 | grep "something")
Or, rather, it sets it to a blank value, because if I set it before running the above, the variable is blank afterwards.
bash variable telnet timeout
add a comment |
I'm trying to automatically query a status via telnet (this isn't something I'm able to work around in this case). The idea is to grep for something and assign the result to a variable, to pass to a conditional statement later. The complication is the link to the target device may not be up, and therefore the script could hang indefinitely if not killed via a timeout.
This sets output
to what I'd expect, but does not handle the link being down:
output=$(telnet 1.2.3.4 1234 | grep "something")
This will spit out the expected output while handling the link being down:
timeout --signal=9 3 telnet 1.2.3.4 1234 | grep "something"
I can even direct the output to a file and the file will contain the output:
timeout --signal=9 3 telnet 1.2.3.4 1234 | grep "something" > /tmp/tmpfile.txt
Unfortunately rapid write/read of a file like this isn't an option because of how much it'll fill up log files.
But, when I try to combine everything, the variable doesn't set:
output=$(timeout --signal=9 3 telnet 1.2.3.4 1234 | grep "something")
Or, rather, it sets it to a blank value, because if I set it before running the above, the variable is blank afterwards.
bash variable telnet timeout
add a comment |
I'm trying to automatically query a status via telnet (this isn't something I'm able to work around in this case). The idea is to grep for something and assign the result to a variable, to pass to a conditional statement later. The complication is the link to the target device may not be up, and therefore the script could hang indefinitely if not killed via a timeout.
This sets output
to what I'd expect, but does not handle the link being down:
output=$(telnet 1.2.3.4 1234 | grep "something")
This will spit out the expected output while handling the link being down:
timeout --signal=9 3 telnet 1.2.3.4 1234 | grep "something"
I can even direct the output to a file and the file will contain the output:
timeout --signal=9 3 telnet 1.2.3.4 1234 | grep "something" > /tmp/tmpfile.txt
Unfortunately rapid write/read of a file like this isn't an option because of how much it'll fill up log files.
But, when I try to combine everything, the variable doesn't set:
output=$(timeout --signal=9 3 telnet 1.2.3.4 1234 | grep "something")
Or, rather, it sets it to a blank value, because if I set it before running the above, the variable is blank afterwards.
bash variable telnet timeout
I'm trying to automatically query a status via telnet (this isn't something I'm able to work around in this case). The idea is to grep for something and assign the result to a variable, to pass to a conditional statement later. The complication is the link to the target device may not be up, and therefore the script could hang indefinitely if not killed via a timeout.
This sets output
to what I'd expect, but does not handle the link being down:
output=$(telnet 1.2.3.4 1234 | grep "something")
This will spit out the expected output while handling the link being down:
timeout --signal=9 3 telnet 1.2.3.4 1234 | grep "something"
I can even direct the output to a file and the file will contain the output:
timeout --signal=9 3 telnet 1.2.3.4 1234 | grep "something" > /tmp/tmpfile.txt
Unfortunately rapid write/read of a file like this isn't an option because of how much it'll fill up log files.
But, when I try to combine everything, the variable doesn't set:
output=$(timeout --signal=9 3 telnet 1.2.3.4 1234 | grep "something")
Or, rather, it sets it to a blank value, because if I set it before running the above, the variable is blank afterwards.
bash variable telnet timeout
bash variable telnet timeout
asked yesterday
Ken OhKen Oh
102127
102127
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
telnet
expects a tty on its stdin, but timeout
takes that away.
If you really insist on using telnet you may do so by adding --foreground
option to timeout
, as in:
output=$(timeout --foreground --signal=9 3 telnet 1.2.3.4 1234 2>&1 | grep "something")
Besides, if you can have nc
on your system you should really rather use that for your purpose:
output=$(timeout 3 nc 1.2.3.4 1234 | grep "something")
If neither nc
nor timeout --foreground
are an option for you then you really need an alternative to telnet that won’t need a tty.
I see you tagged your question bash
, so you could use Bash’s own networking facilities, and thus your line might become like:
output=$(timeout 3 cat < /dev/tcp/1.2.3.4/1234 | grep "something")
If not even cat
is an option then you could replace it with a one-liner script in Bash, like in:
output=$(timeout 3 stdbuf -oL bash -c 'while read line ; do echo "$line" ; done < /dev/tcp/1.2.3.4/1234 | grep "something"')
Hoping that at least stdbuf
(which is part of standard coreutils package) is available in your system.
In this last alternative however pay attention to your grep regex: if you have single-quotes in there then you need to escape them by first quitting the main single-quote pair.
That is needed also if you need to pass variables (eg hostname and/or port number) from your shell to the one-liner script. For instance:
hostname=1.2.3.4
portnumber=1234
output=$(timeout 3 stdbuf -oL bash -c 'while read line ; do echo "$line" ; done < /dev/tcp/'"$hostname"'/'"$portnumber"' | grep "something"')
Here I'm assuming that $hostname
and $portnumber
values can be trusted, ie provided by you or by other trusted sources that won't give illegitimate, invalid, or dangerous values.
Unfortunately, I don't havenc
and mytimeout
also lacks--foreground
(and anything other than-s
or--signal
).
– Ken Oh
23 hours ago
@KenOh Having noted thebash
tag in your question I’ve updated my answer for more alternatives , but ifbash
is actually not an option for you then please specify what system you are in
– LL3
16 hours ago
Sorry, I should have noted that it's on RHEL 6, with the complication that a lot of the utility commands being bare bones, and I'm not able to change any of that. I really appreciate the one-liner suggestions. They actually set the variable where the timeout versions do not, however they hang forever if the the link is down. My original thought was to send it to the background via&
, but that failed when I couldn't pull variables from the background process to the current script. I may be barking up the wrong tree and should use a subscript with exit codes or something.
– Ken Oh
13 hours ago
1
@KenOh Oh right, sorry, I had forgotten about that requirement! I’ve updated my answer again for the one-liner script, making it usetimeout
again in place of the-t 3
option ofread
which would timeout only after the connection was at least established. Anyway, besides the one-liner script, doesn’t RHEL6 even hascat
?!
– LL3
11 hours ago
I'm marking this as answered. Thank you very much! I do have to figure out why I'm having problems inserting variables into my telnet targets (e.g./dev/tcp/$ip/$port
seems to not pass the variables), but I suppose that's a different question.
– Ken Oh
11 hours ago
|
show 2 more comments
It is the standard error that is not being redirected (when your link is down)!
This will solve your problem, because it redirects the standard error to the standard output.
output=$(timeout --signal=9 3 telnet 1.2.3.4 1234 2>&1 | grep "something")
I meant to say I've tried that. Puzzlingly, it doesn't change the behavior one bit (even if I output it to a file). To be clear, I don't need stderr. I actually do want what is being grepped.
– Ken Oh
yesterday
Can you post a example of what are being returned? I tested here, and it worked fine... Are you really running bash?
– Luciano Andress Martini
yesterday
Sure!timeout --signal=9 3 telnet 1.2.3.4 1234 2>&1 | grep "something"
just returnssomething
whiletimeout --signal=9 3 telnet 1.2.3.4 1234 | grep "something"
returnssomething
Connection Closed by foreign host.
– Ken Oh
yesterday
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "106"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f508806%2fsetting-variable-output-from-timeout%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
telnet
expects a tty on its stdin, but timeout
takes that away.
If you really insist on using telnet you may do so by adding --foreground
option to timeout
, as in:
output=$(timeout --foreground --signal=9 3 telnet 1.2.3.4 1234 2>&1 | grep "something")
Besides, if you can have nc
on your system you should really rather use that for your purpose:
output=$(timeout 3 nc 1.2.3.4 1234 | grep "something")
If neither nc
nor timeout --foreground
are an option for you then you really need an alternative to telnet that won’t need a tty.
I see you tagged your question bash
, so you could use Bash’s own networking facilities, and thus your line might become like:
output=$(timeout 3 cat < /dev/tcp/1.2.3.4/1234 | grep "something")
If not even cat
is an option then you could replace it with a one-liner script in Bash, like in:
output=$(timeout 3 stdbuf -oL bash -c 'while read line ; do echo "$line" ; done < /dev/tcp/1.2.3.4/1234 | grep "something"')
Hoping that at least stdbuf
(which is part of standard coreutils package) is available in your system.
In this last alternative however pay attention to your grep regex: if you have single-quotes in there then you need to escape them by first quitting the main single-quote pair.
That is needed also if you need to pass variables (eg hostname and/or port number) from your shell to the one-liner script. For instance:
hostname=1.2.3.4
portnumber=1234
output=$(timeout 3 stdbuf -oL bash -c 'while read line ; do echo "$line" ; done < /dev/tcp/'"$hostname"'/'"$portnumber"' | grep "something"')
Here I'm assuming that $hostname
and $portnumber
values can be trusted, ie provided by you or by other trusted sources that won't give illegitimate, invalid, or dangerous values.
Unfortunately, I don't havenc
and mytimeout
also lacks--foreground
(and anything other than-s
or--signal
).
– Ken Oh
23 hours ago
@KenOh Having noted thebash
tag in your question I’ve updated my answer for more alternatives , but ifbash
is actually not an option for you then please specify what system you are in
– LL3
16 hours ago
Sorry, I should have noted that it's on RHEL 6, with the complication that a lot of the utility commands being bare bones, and I'm not able to change any of that. I really appreciate the one-liner suggestions. They actually set the variable where the timeout versions do not, however they hang forever if the the link is down. My original thought was to send it to the background via&
, but that failed when I couldn't pull variables from the background process to the current script. I may be barking up the wrong tree and should use a subscript with exit codes or something.
– Ken Oh
13 hours ago
1
@KenOh Oh right, sorry, I had forgotten about that requirement! I’ve updated my answer again for the one-liner script, making it usetimeout
again in place of the-t 3
option ofread
which would timeout only after the connection was at least established. Anyway, besides the one-liner script, doesn’t RHEL6 even hascat
?!
– LL3
11 hours ago
I'm marking this as answered. Thank you very much! I do have to figure out why I'm having problems inserting variables into my telnet targets (e.g./dev/tcp/$ip/$port
seems to not pass the variables), but I suppose that's a different question.
– Ken Oh
11 hours ago
|
show 2 more comments
telnet
expects a tty on its stdin, but timeout
takes that away.
If you really insist on using telnet you may do so by adding --foreground
option to timeout
, as in:
output=$(timeout --foreground --signal=9 3 telnet 1.2.3.4 1234 2>&1 | grep "something")
Besides, if you can have nc
on your system you should really rather use that for your purpose:
output=$(timeout 3 nc 1.2.3.4 1234 | grep "something")
If neither nc
nor timeout --foreground
are an option for you then you really need an alternative to telnet that won’t need a tty.
I see you tagged your question bash
, so you could use Bash’s own networking facilities, and thus your line might become like:
output=$(timeout 3 cat < /dev/tcp/1.2.3.4/1234 | grep "something")
If not even cat
is an option then you could replace it with a one-liner script in Bash, like in:
output=$(timeout 3 stdbuf -oL bash -c 'while read line ; do echo "$line" ; done < /dev/tcp/1.2.3.4/1234 | grep "something"')
Hoping that at least stdbuf
(which is part of standard coreutils package) is available in your system.
In this last alternative however pay attention to your grep regex: if you have single-quotes in there then you need to escape them by first quitting the main single-quote pair.
That is needed also if you need to pass variables (eg hostname and/or port number) from your shell to the one-liner script. For instance:
hostname=1.2.3.4
portnumber=1234
output=$(timeout 3 stdbuf -oL bash -c 'while read line ; do echo "$line" ; done < /dev/tcp/'"$hostname"'/'"$portnumber"' | grep "something"')
Here I'm assuming that $hostname
and $portnumber
values can be trusted, ie provided by you or by other trusted sources that won't give illegitimate, invalid, or dangerous values.
Unfortunately, I don't havenc
and mytimeout
also lacks--foreground
(and anything other than-s
or--signal
).
– Ken Oh
23 hours ago
@KenOh Having noted thebash
tag in your question I’ve updated my answer for more alternatives , but ifbash
is actually not an option for you then please specify what system you are in
– LL3
16 hours ago
Sorry, I should have noted that it's on RHEL 6, with the complication that a lot of the utility commands being bare bones, and I'm not able to change any of that. I really appreciate the one-liner suggestions. They actually set the variable where the timeout versions do not, however they hang forever if the the link is down. My original thought was to send it to the background via&
, but that failed when I couldn't pull variables from the background process to the current script. I may be barking up the wrong tree and should use a subscript with exit codes or something.
– Ken Oh
13 hours ago
1
@KenOh Oh right, sorry, I had forgotten about that requirement! I’ve updated my answer again for the one-liner script, making it usetimeout
again in place of the-t 3
option ofread
which would timeout only after the connection was at least established. Anyway, besides the one-liner script, doesn’t RHEL6 even hascat
?!
– LL3
11 hours ago
I'm marking this as answered. Thank you very much! I do have to figure out why I'm having problems inserting variables into my telnet targets (e.g./dev/tcp/$ip/$port
seems to not pass the variables), but I suppose that's a different question.
– Ken Oh
11 hours ago
|
show 2 more comments
telnet
expects a tty on its stdin, but timeout
takes that away.
If you really insist on using telnet you may do so by adding --foreground
option to timeout
, as in:
output=$(timeout --foreground --signal=9 3 telnet 1.2.3.4 1234 2>&1 | grep "something")
Besides, if you can have nc
on your system you should really rather use that for your purpose:
output=$(timeout 3 nc 1.2.3.4 1234 | grep "something")
If neither nc
nor timeout --foreground
are an option for you then you really need an alternative to telnet that won’t need a tty.
I see you tagged your question bash
, so you could use Bash’s own networking facilities, and thus your line might become like:
output=$(timeout 3 cat < /dev/tcp/1.2.3.4/1234 | grep "something")
If not even cat
is an option then you could replace it with a one-liner script in Bash, like in:
output=$(timeout 3 stdbuf -oL bash -c 'while read line ; do echo "$line" ; done < /dev/tcp/1.2.3.4/1234 | grep "something"')
Hoping that at least stdbuf
(which is part of standard coreutils package) is available in your system.
In this last alternative however pay attention to your grep regex: if you have single-quotes in there then you need to escape them by first quitting the main single-quote pair.
That is needed also if you need to pass variables (eg hostname and/or port number) from your shell to the one-liner script. For instance:
hostname=1.2.3.4
portnumber=1234
output=$(timeout 3 stdbuf -oL bash -c 'while read line ; do echo "$line" ; done < /dev/tcp/'"$hostname"'/'"$portnumber"' | grep "something"')
Here I'm assuming that $hostname
and $portnumber
values can be trusted, ie provided by you or by other trusted sources that won't give illegitimate, invalid, or dangerous values.
telnet
expects a tty on its stdin, but timeout
takes that away.
If you really insist on using telnet you may do so by adding --foreground
option to timeout
, as in:
output=$(timeout --foreground --signal=9 3 telnet 1.2.3.4 1234 2>&1 | grep "something")
Besides, if you can have nc
on your system you should really rather use that for your purpose:
output=$(timeout 3 nc 1.2.3.4 1234 | grep "something")
If neither nc
nor timeout --foreground
are an option for you then you really need an alternative to telnet that won’t need a tty.
I see you tagged your question bash
, so you could use Bash’s own networking facilities, and thus your line might become like:
output=$(timeout 3 cat < /dev/tcp/1.2.3.4/1234 | grep "something")
If not even cat
is an option then you could replace it with a one-liner script in Bash, like in:
output=$(timeout 3 stdbuf -oL bash -c 'while read line ; do echo "$line" ; done < /dev/tcp/1.2.3.4/1234 | grep "something"')
Hoping that at least stdbuf
(which is part of standard coreutils package) is available in your system.
In this last alternative however pay attention to your grep regex: if you have single-quotes in there then you need to escape them by first quitting the main single-quote pair.
That is needed also if you need to pass variables (eg hostname and/or port number) from your shell to the one-liner script. For instance:
hostname=1.2.3.4
portnumber=1234
output=$(timeout 3 stdbuf -oL bash -c 'while read line ; do echo "$line" ; done < /dev/tcp/'"$hostname"'/'"$portnumber"' | grep "something"')
Here I'm assuming that $hostname
and $portnumber
values can be trusted, ie provided by you or by other trusted sources that won't give illegitimate, invalid, or dangerous values.
edited 11 hours ago
answered yesterday
LL3LL3
1565
1565
Unfortunately, I don't havenc
and mytimeout
also lacks--foreground
(and anything other than-s
or--signal
).
– Ken Oh
23 hours ago
@KenOh Having noted thebash
tag in your question I’ve updated my answer for more alternatives , but ifbash
is actually not an option for you then please specify what system you are in
– LL3
16 hours ago
Sorry, I should have noted that it's on RHEL 6, with the complication that a lot of the utility commands being bare bones, and I'm not able to change any of that. I really appreciate the one-liner suggestions. They actually set the variable where the timeout versions do not, however they hang forever if the the link is down. My original thought was to send it to the background via&
, but that failed when I couldn't pull variables from the background process to the current script. I may be barking up the wrong tree and should use a subscript with exit codes or something.
– Ken Oh
13 hours ago
1
@KenOh Oh right, sorry, I had forgotten about that requirement! I’ve updated my answer again for the one-liner script, making it usetimeout
again in place of the-t 3
option ofread
which would timeout only after the connection was at least established. Anyway, besides the one-liner script, doesn’t RHEL6 even hascat
?!
– LL3
11 hours ago
I'm marking this as answered. Thank you very much! I do have to figure out why I'm having problems inserting variables into my telnet targets (e.g./dev/tcp/$ip/$port
seems to not pass the variables), but I suppose that's a different question.
– Ken Oh
11 hours ago
|
show 2 more comments
Unfortunately, I don't havenc
and mytimeout
also lacks--foreground
(and anything other than-s
or--signal
).
– Ken Oh
23 hours ago
@KenOh Having noted thebash
tag in your question I’ve updated my answer for more alternatives , but ifbash
is actually not an option for you then please specify what system you are in
– LL3
16 hours ago
Sorry, I should have noted that it's on RHEL 6, with the complication that a lot of the utility commands being bare bones, and I'm not able to change any of that. I really appreciate the one-liner suggestions. They actually set the variable where the timeout versions do not, however they hang forever if the the link is down. My original thought was to send it to the background via&
, but that failed when I couldn't pull variables from the background process to the current script. I may be barking up the wrong tree and should use a subscript with exit codes or something.
– Ken Oh
13 hours ago
1
@KenOh Oh right, sorry, I had forgotten about that requirement! I’ve updated my answer again for the one-liner script, making it usetimeout
again in place of the-t 3
option ofread
which would timeout only after the connection was at least established. Anyway, besides the one-liner script, doesn’t RHEL6 even hascat
?!
– LL3
11 hours ago
I'm marking this as answered. Thank you very much! I do have to figure out why I'm having problems inserting variables into my telnet targets (e.g./dev/tcp/$ip/$port
seems to not pass the variables), but I suppose that's a different question.
– Ken Oh
11 hours ago
Unfortunately, I don't have
nc
and my timeout
also lacks --foreground
(and anything other than -s
or --signal
).– Ken Oh
23 hours ago
Unfortunately, I don't have
nc
and my timeout
also lacks --foreground
(and anything other than -s
or --signal
).– Ken Oh
23 hours ago
@KenOh Having noted the
bash
tag in your question I’ve updated my answer for more alternatives , but if bash
is actually not an option for you then please specify what system you are in– LL3
16 hours ago
@KenOh Having noted the
bash
tag in your question I’ve updated my answer for more alternatives , but if bash
is actually not an option for you then please specify what system you are in– LL3
16 hours ago
Sorry, I should have noted that it's on RHEL 6, with the complication that a lot of the utility commands being bare bones, and I'm not able to change any of that. I really appreciate the one-liner suggestions. They actually set the variable where the timeout versions do not, however they hang forever if the the link is down. My original thought was to send it to the background via
&
, but that failed when I couldn't pull variables from the background process to the current script. I may be barking up the wrong tree and should use a subscript with exit codes or something.– Ken Oh
13 hours ago
Sorry, I should have noted that it's on RHEL 6, with the complication that a lot of the utility commands being bare bones, and I'm not able to change any of that. I really appreciate the one-liner suggestions. They actually set the variable where the timeout versions do not, however they hang forever if the the link is down. My original thought was to send it to the background via
&
, but that failed when I couldn't pull variables from the background process to the current script. I may be barking up the wrong tree and should use a subscript with exit codes or something.– Ken Oh
13 hours ago
1
1
@KenOh Oh right, sorry, I had forgotten about that requirement! I’ve updated my answer again for the one-liner script, making it use
timeout
again in place of the -t 3
option of read
which would timeout only after the connection was at least established. Anyway, besides the one-liner script, doesn’t RHEL6 even has cat
?!– LL3
11 hours ago
@KenOh Oh right, sorry, I had forgotten about that requirement! I’ve updated my answer again for the one-liner script, making it use
timeout
again in place of the -t 3
option of read
which would timeout only after the connection was at least established. Anyway, besides the one-liner script, doesn’t RHEL6 even has cat
?!– LL3
11 hours ago
I'm marking this as answered. Thank you very much! I do have to figure out why I'm having problems inserting variables into my telnet targets (e.g.
/dev/tcp/$ip/$port
seems to not pass the variables), but I suppose that's a different question.– Ken Oh
11 hours ago
I'm marking this as answered. Thank you very much! I do have to figure out why I'm having problems inserting variables into my telnet targets (e.g.
/dev/tcp/$ip/$port
seems to not pass the variables), but I suppose that's a different question.– Ken Oh
11 hours ago
|
show 2 more comments
It is the standard error that is not being redirected (when your link is down)!
This will solve your problem, because it redirects the standard error to the standard output.
output=$(timeout --signal=9 3 telnet 1.2.3.4 1234 2>&1 | grep "something")
I meant to say I've tried that. Puzzlingly, it doesn't change the behavior one bit (even if I output it to a file). To be clear, I don't need stderr. I actually do want what is being grepped.
– Ken Oh
yesterday
Can you post a example of what are being returned? I tested here, and it worked fine... Are you really running bash?
– Luciano Andress Martini
yesterday
Sure!timeout --signal=9 3 telnet 1.2.3.4 1234 2>&1 | grep "something"
just returnssomething
whiletimeout --signal=9 3 telnet 1.2.3.4 1234 | grep "something"
returnssomething
Connection Closed by foreign host.
– Ken Oh
yesterday
add a comment |
It is the standard error that is not being redirected (when your link is down)!
This will solve your problem, because it redirects the standard error to the standard output.
output=$(timeout --signal=9 3 telnet 1.2.3.4 1234 2>&1 | grep "something")
I meant to say I've tried that. Puzzlingly, it doesn't change the behavior one bit (even if I output it to a file). To be clear, I don't need stderr. I actually do want what is being grepped.
– Ken Oh
yesterday
Can you post a example of what are being returned? I tested here, and it worked fine... Are you really running bash?
– Luciano Andress Martini
yesterday
Sure!timeout --signal=9 3 telnet 1.2.3.4 1234 2>&1 | grep "something"
just returnssomething
whiletimeout --signal=9 3 telnet 1.2.3.4 1234 | grep "something"
returnssomething
Connection Closed by foreign host.
– Ken Oh
yesterday
add a comment |
It is the standard error that is not being redirected (when your link is down)!
This will solve your problem, because it redirects the standard error to the standard output.
output=$(timeout --signal=9 3 telnet 1.2.3.4 1234 2>&1 | grep "something")
It is the standard error that is not being redirected (when your link is down)!
This will solve your problem, because it redirects the standard error to the standard output.
output=$(timeout --signal=9 3 telnet 1.2.3.4 1234 2>&1 | grep "something")
answered yesterday
Luciano Andress MartiniLuciano Andress Martini
4,1241137
4,1241137
I meant to say I've tried that. Puzzlingly, it doesn't change the behavior one bit (even if I output it to a file). To be clear, I don't need stderr. I actually do want what is being grepped.
– Ken Oh
yesterday
Can you post a example of what are being returned? I tested here, and it worked fine... Are you really running bash?
– Luciano Andress Martini
yesterday
Sure!timeout --signal=9 3 telnet 1.2.3.4 1234 2>&1 | grep "something"
just returnssomething
whiletimeout --signal=9 3 telnet 1.2.3.4 1234 | grep "something"
returnssomething
Connection Closed by foreign host.
– Ken Oh
yesterday
add a comment |
I meant to say I've tried that. Puzzlingly, it doesn't change the behavior one bit (even if I output it to a file). To be clear, I don't need stderr. I actually do want what is being grepped.
– Ken Oh
yesterday
Can you post a example of what are being returned? I tested here, and it worked fine... Are you really running bash?
– Luciano Andress Martini
yesterday
Sure!timeout --signal=9 3 telnet 1.2.3.4 1234 2>&1 | grep "something"
just returnssomething
whiletimeout --signal=9 3 telnet 1.2.3.4 1234 | grep "something"
returnssomething
Connection Closed by foreign host.
– Ken Oh
yesterday
I meant to say I've tried that. Puzzlingly, it doesn't change the behavior one bit (even if I output it to a file). To be clear, I don't need stderr. I actually do want what is being grepped.
– Ken Oh
yesterday
I meant to say I've tried that. Puzzlingly, it doesn't change the behavior one bit (even if I output it to a file). To be clear, I don't need stderr. I actually do want what is being grepped.
– Ken Oh
yesterday
Can you post a example of what are being returned? I tested here, and it worked fine... Are you really running bash?
– Luciano Andress Martini
yesterday
Can you post a example of what are being returned? I tested here, and it worked fine... Are you really running bash?
– Luciano Andress Martini
yesterday
Sure!
timeout --signal=9 3 telnet 1.2.3.4 1234 2>&1 | grep "something"
just returns something
while timeout --signal=9 3 telnet 1.2.3.4 1234 | grep "something"
returns something
Connection Closed by foreign host.
– Ken Oh
yesterday
Sure!
timeout --signal=9 3 telnet 1.2.3.4 1234 2>&1 | grep "something"
just returns something
while timeout --signal=9 3 telnet 1.2.3.4 1234 | grep "something"
returns something
Connection Closed by foreign host.
– Ken Oh
yesterday
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f508806%2fsetting-variable-output-from-timeout%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
-bash, telnet, timeout, variable