[解決済み】xargsでシェル関数を呼び出す。
2022-04-22 20:37:58
質問
xargsを使って、より複雑な関数を並列で呼び出そうとしています。
#!/bin/bash
echo_var(){
echo $1
return 0
}
seq -f "n%04g" 1 100 |xargs -n 1 -P 10 -i echo_var {}
exit 0
これはエラーを返します
xargs: echo_var: No such file or directory
これを達成するためにxargsを使用する方法、または他の解決策(複数可)について何かアイデアがあれば歓迎します。
どのように解決するのですか?
関数をエクスポートするとうまくいくはずです(未検証)。
export -f echo_var
seq -f "n%04g" 1 100 | xargs -n 1 -P 10 -I {} bash -c 'echo_var "$@"' _ {}
を使用すると、組み込みの
printf
の代わりに、外部の
seq
:
printf "n%04g\n" {1..100} | xargs -n 1 -P 10 -I {} bash -c 'echo_var "$@"' _ {}
また
return 0
と
exit 0
のように、その前のコマンドで生成されるかもしれないエラー値をマスクする。また、エラーがない場合はデフォルトなので、やや冗長になります。
は、Bashのコマンドである が可能です。 簡略化される
bash -c 'echo_var "{}"'
を移動させる
{}
をその中に直接入れてください。
しかし
それは
コマンドインジェクションの脆弱性
が指摘したように、@Sashaが
以下はその例です。 を使うべきではありません。 を埋め込むことができます。
$ echo '$(date)' | xargs -I {} bash -c 'echo_var "{}"'
Sun Aug 18 11:56:45 CDT 2019
もう一つの例 なんでやねん :
echo '\"; date\"' | xargs -I {} bash -c 'echo_var "{}"'
これが出力される内容です 安全な形式を使用する :
$ echo '$(date)' | xargs -I {} bash -c 'echo_var "$@"' _ {}
$(date)
を使用するのと同等です。 パラメータ化された SQL クエリ を避けるために インジェクション .
を使っています。
date
の代わりに、コマンドの代入やエスケープクォートを使用することができます。
rm
コマンドは非破壊なので、Sashaのコメントで使用されています。
関連
-
[解決済み] condaのアップデート後、ターミナルのプロンプトから(base)を削除する方法
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] シェルで、「2>&1」はどういう意味ですか?
-
[解決済み] LinuxのシェルスクリプトでYes/No/Cancelの入力を促すにはどうしたらいいですか?
-
[解決済み] Bashシェルスクリプトの入力引数の存在確認
-
[解決済み] Git上でシェルコマンドを実行する際に使用するSSH-keyの秘密鍵を指定する方法は?
-
[解決済み] シェルスクリプトでYYYY-MM-DD形式の日付にする
-
[解決済み] シェルスクリプトでブール変数を宣言して使用するにはどうすればよいですか?
-
[解決済み] シェルコマンドを実行しながらエコーする方法
-
[解決済み】xargsで複数のコマンドを実行する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ログアウトと再ログインをせずに.bashrcの設定を再読み込みする方法?
-
[解決済み] '\r': command not found - .bashrc / .bash_profile [duplicate].
-
[解決済み] MacOSのbashターミナルでexport PS1="\u[\033[m]@[\033[32m]\h:\[\033[33;1m]\w[\033[m]\$" は何を意味していますか?
-
[解決済み] Docker ubuntu イメージ - bash: man: コマンドが見つかりません。
-
[解決済み] cmake execute_process COMMAND [重複]。
-
[解決済み] ssh / リモートbashコマンドでシングルクォート文字をエスケープするにはどうすればよいですか?
-
[解決済み] Bashで最新のディレクトリを変数に取得する
-
解決策:bash: /root/.bashrc: パーミッションが拒否されました
-
[解決済み] Grep 'binary file matches'. どうすれば正常なgrepの出力が得られるか?[重複]する
-
[解決済み] bash で複数のサブプロセスが終了するのを待ち、いずれかのサブプロセスがコード !=0 で終了したときに終了コード !=0 を返すにはどうすればよいですか?