このように、stdinを文字列に連結するにはどうすればよいですか?
echo "input" | COMMAND "string"
取得します
inputstring
少しハッキーですが、これは質問で尋ねたことを実行するための最短の方法かもしれません(パイプを使用して別のプロセス/コマンドを受け入れるstdout
ためecho "input"
にstdin
:
echo "input" | awk '{print $1"string"}'
出力:
inputstring
あなたは正確にどのようなタスクを達成しようとしていますか?より多くのコンテキストは、より良いソリューションへのより多くの方向性を得ることができます。
更新-コメントへの応答:
@NoamRoss
次に、必要なことを行うためのより慣用的な方法は次のとおりです。
echo 'http://dx.doi.org/'"$(pbpaste)"
$(...)
構文はコマンド置換と呼ばれます。つまり、新しいサブシェルで囲まれたコマンドを実行し、そのstdout
出力を$(...)
親シェルで呼び出された場所に置き換えます。したがって、実際には次のようになります。
echo 'http://dx.doi.org/'"rsif.2012.0125"
cat -
stdinから読み取るために使用し$()
、末尾の改行を破棄するために挿入します
echo input | COMMAND "$(cat -)string"
ただし、コマンド置換でパイプをドロップして左側の出力を取得してみませんか。
COMMAND "$(echo input)string"
私はパイプをよく使用しているので、これはstdinの接頭辞と接尾辞を付ける簡単な方法になる傾向があります。
echo -n "my standard in" | cat <(echo -n "prefix... ") - <(echo " ...suffix")
prefix... my standard in ...suffix
これを達成する方法はいくつかありますが、個人的には次のことが最善だと思います。
echo input | while read line; do echo $line string; done
もう1つは、sedコマンドで「$」(行末文字)を「string」に置き換えることです。
echo input | sed "s/$/ string/g"
なぜ私は前者を好むのですか?たとえば、次のコマンドを使用して、文字列をstdinに即座に連結するためです。
(echo input_one ;sleep 5; echo input_two ) | while read line; do echo $line string; done
すぐに最初の出力が得られます。
input_one string
そして5秒後に他のエコーを受け取ります:
input_two string
一方、「sed」を使用すると、最初に括弧の内容がすべて実行され、次に「sed」に渡されるため、コマンド
(echo input_one ;sleep 5; echo input_two ) | sed "s/$/ string/g"
両方の行を出力します
input_one string
input_two string
5秒後。
これは、完了するまでに長い時間がかかり、関数の出力について継続的に更新したい関数の呼び出しを実行している場合に非常に役立ちます。
あなたはsedでそれを行うことができます:
seq 5 | sed '$a\6'
seq 5 | sed '$ s/.*/\0 6/'
あなたの例では:
echo input | sed 's/.*/\0string/'
これは数年遅れていることは知っていますが、xargs-Jオプションを使用してこれを実現できます。
echo "input" | xargs -J "%" echo "%" "string"
また、 xargsであるため、ファイルの複数の行で一度にこれを行うことができます。ファイル'names'に次のような3行がある場合:
Adam
Bob
Charlie
あなたができること:
cat names | xargs -n 1 -J "%" echo "I like" "%" "because he is nice"
投稿したコマンドは、文字列「input」をCOMMANDのstdinストリームとして使用します。これは、COMMANDが最初にstdinの内容を出力し、次にコマンドライン引数を出力しない限り、探している結果を生成しません。
あなたがやりたいことは、コマンド置換にもっと近いようです。
http://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html#Command-Substitution
コマンド置換を使用すると、次のようなコマンドラインを使用できます。
echo input `COMMAND "string"`
これにより、最初に「文字列」を入力としてCOMMANDが評価され、次にそのコマンド実行の結果が1行に展開され、「`」文字の間にあるものが置き換えられます。
また動作します:
seq -w 0 100 | xargs -I {} echo "string "{}
次のような文字列を生成します:
string 000
string 001
string 002
string 003
string 004
..。
猫が私の選択になります:ls | cat - <(echo new line)
実行する前に、SQLスクリプトの前に「set」ステートメントを追加したいと思います。そこで、「set」命令をエコーして、それをcatにパイプします。コマンドcatは2つのパラメーターを取ります:「-」とマークされたSTDINと私のsqlファイル、catはそれらの両方を1つの出力に結合します。次に、結果をmysqlコマンドに渡して、スクリプトとして実行します。
echo "set @ZERO_PRODUCTS_DISPLAY='$ZERO_PRODUCTS_DISPLAY';" | cat - sql/test_parameter.sql | mysql
psmysqlのログインとパスワードが.my.cnf
ファイルに保存されます