bashスクリプトの3行を1行にまとめる

bashスクリプトの3行を1行にまとめる

Google で検索した内容は次のとおりです。

dpkg --list 'linux-image-*' \
    | perl -ane 'BEGIN { $r = `uname -r` or die; chomp $r } print $F[1], "\n" if $F[0] eq "ii" && $F[1] !~ /\Q$r\E\b/' \
    | xargs -r aptitude purge -y

誰かが上記の3行を1つにまとめることができますか?私は一度に3行をコピーするよりも1行をコピーしてsudoコマンドに貼り付ける方が簡単です。

Hauke 遅延の場合: sudo コマンドに従って一度に 3 つの区切り線をコピーしようとしたときに、エラー メッセージを含めるようにこのソース ポストを編集しました。

username@hostname:~$ sudo -i
[sudo] password for username: 
root@hostname:~# dpkg --list 'linux-image-*' \
> 
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version      Architecture Description
+++-==============-============-============-=================================
un  linux-image-2. <none>                    (no description available)
un  linux-image-2. <none>                    (no description available)
un  linux-image-2. <none>                    (no description available)
un  linux-image-2. <none>                    (no description available)
ii  linux-image-3. 3.14.4-1~bpo amd64        Linux 3.14 for 64-bit PCs
ii  linux-image-3. 3.2.57-3+deb amd64        Linux 3.2 for 64-bit PCs
ii  linux-image-am 3.14+57~bpo7 amd64        Linux for 64-bit PCs (meta-packag
root@hostname:~#     | perl -ane 'BEGIN { $r = `uname -r` or die; chomp $r } print $F[1], "\n" if $F[0] eq "ii" && $F[1] !~ /\Q$r\E\b/' \
-bash: syntax error near unexpected token `|'
root@hostname:~# 
root@hostname:~#     | xargs -r aptitude purge -y

ベストアンサー1

これらの3行のいずれかを選択する必要はありません。改行文字がエスケープされると、シェルはそれを削除します\。つまり、3行の引数を持つコマンドは、3行ではなく1行だけ「表示」できます。

次の質問は次のとおりです。

sudo cmd1 | cmd2 | cmd3

ルートとしてのみ実行されますcmd1。次のようなことができます

sudo bash -c 'cmd1 | cmd2 | cmd3'

しかし、これは引用の迷惑を引き起こす可能性があります。

最も簡単な解決策は、おそらく空のファイルを作成し、ここに3行をコピーして実行することです。

sudo bash file

|安全な改行のために

|行の末尾に入れてください。これにより(追加)改行文字が問題になりません。この試み:

dpkg --list 'linux-image-*' |
  perl -ane 'BEGIN { $r = `uname -r` or die; chomp $r } print $F[1], "\n" if $F[0] eq "ii" && $F[1] !~ /\Q$r\E\b/' |
  sudo xargs -r aptitude purge -y

おすすめ記事