Maaf untuk judul yang membingungkan!
Misalkan saya lari
apt-cache depends kde-window-manager > ~/Desktop/kwin-depends
Saya akan mendapatkan file bernama "kwin-depend" di folder Desktop saya.
Apakah ada beberapa trik untuk memasukkan perintah yang saya keluarkan sebagai bagian dari file, terutama pada awal file?
Jadi, setidaknya dalam 14,04 LTS, beberapa baris pertama akan terlihat seperti ini:
apt-cache depends kde-window-manager > ~/Desktop/kwin-depends
kde-window-manager
Depends: kde-runtime
Depends: libc6
|Depends: libegl1-mesa
Depends: <libegl1-x11>
Alih-alih hanya seperti ini:
kde-window-manager
Depends: kde-runtime
Depends: libc6
|Depends: libegl1-mesa
Depends: <libegl1-x11>
command-line
bash
DK Bose
sumber
sumber
Jawaban:
Saya hanya akan menggunakan fungsi sederhana. Tambahkan ini ke
~/.bashrc
file Anda :Sekarang, kapan pun Anda ingin menjalankan perintah dan mencetaknya, Anda dapat melakukan:
Di atas menghasilkan file ini:
sumber
apt-cache depends
untukacd
, saya mendapatkan "Tidak ada perintah 'acd' ditemukan, maksud Anda: ..." ketika saya menjalankanruncom acd leafpad > out
.ls
aliasls --color=auto'
dalam kenyataan. Apa yang Anda bisa lakukan (selama tidak ada tanda kutip tunggal atau tanda kutip ganda alias Anda), adalah ini:$ terdonsFunction $(alias ls | awk -F '=' '{$1="";print}'| tr "'" " ")
.MYCOMMAND="apt-cache depends"; terdonsFunction $MYCOMMAND leafpad > out.txt
Anda dapat melakukan:
Hal yang sama menggunakan
echo
alih-alih string Here (<<<
):tee
akan menulis ke STDOUT dan juga ke filefile.txt
STDOUT
tee
yaituapt-cache depends kde-window-manager
akan diumpankanbash
untuk menjalankan perintah dan menambahkan STDOUT kefile.txt
.Contoh:
sumber
tee
tetapi saya terus gagal. Kerja bagus! +1tee
tampaknya rapi :)Paling minimalis - pendekatan # 4 dan # 3, keduanya dapat dikonversi menjadi fungsi; # 2 favorit saya -
awk
. # 1 menggunakanscript
perintah - alat yang sangat serbaguna, berguna untuk merekam baris perintah secara umum; berlaku di mana saja, untuk apa pun yang ingin Anda rekam.Pendekatan # 1: Ada
/usr/bin/script
perintah (yang datang dengan ubuntu secara default) untuk merekam output baris perintah, yang menangkap semuanya, bersama dengan prompt dan perintah. Untuk hanya menyimpan satu perintah dan outputnya ke file tertentu, gunakan-c
flag dan tentukan file output. ContohPendekatan # 2: awk hackery
Awk memiliki
system()
fungsi yang memungkinkan Anda menjalankan perintah shell dariawk
skrip atau perintah . Output akan muncul di layar, perintah pertama, output selanjutnya. Untuk mengarahkan ulang apa yang Anda lihat ke penggunaan file>
operator .Itu dapat dilakukan dengan dua cara - meminta pengguna untuk memasukkan barang dari stdin atau sebagai argumen baris perintah. Yang pertama lebih mudah untuk dicapai, maka mempostingnya.
(1)
awk 'BEGIN{ print "Enter command to run: "; getline com < "/dev/stdin"; system(com) }'
(2) Versi baris perintah args; tidak termasuk output untuk menghindari membuat jawaban terlalu lama. Sekali lagi, tambahkan
>
untuk mengarahkan ulang ke filePendekatan # 3: minta bash untuk melakukan pekerjaan untuk Anda
Redirect ke file dengan
>
operator:bash -c ' MYCOMMAND="apt-cache depends gnome-terminal"; echo $MYCOMMAND ; $MYCOMMAND ' > output.txt
Pendekatan # 4: (favorit kedua saya)
Terinspirasi oleh pos ByteCommander; kita bisa menggunakan
read
dan menjalankan perintah yang diperlukan dalam subkulitContoh dijalankan:
Pendekatan # 5:
Gunakan
echo
atauhere string
(alias<<< "string"
) untuk memberikan argumensh -c
melaluixargs
Dan jika Anda mau, Anda bisa menggunakan trik yang sama ini dengan alias:
sumber
awk
benar-benar teman kecil yang sangat bisa diatur, bukan? Skrip `terlihat berguna untuk beberapa kegunaan lain juga.script -q outputfile
outputfile
Contoh
Mulailah
script
Mulai perintahmu
Tekan Ctrl-D
Tampilkan perintah dan output Anda
dan Anda akan melihat sesuatu seperti ini
sumber
Jika Anda ingin ekspansi alias (khusus bash) Anda dapat melakukannya dengan cara ini:
Anda sekarang dapat berlari
sumber
Mungkin ada cara yang lebih mudah, tetapi Anda bisa melakukannya dengan skrip:
Buat file
script
dengan konten ini di folder Beranda dan berikan izin eksekusiJalankan dengan cara ini:
sumber
script.sh
selalu membuat file yang disebutscript.log
dengan hasilnya.Solusi yang sangat sederhana menggunakan fungsi Bash satu baris
Persiapan:
Pendekatan ini menggunakan fungsi bash khusus untuk menyediakan fungsionalitas yang diinginkan. Anda mendefinisikannya dengan mengeksekusi baris berikut dalam sesi terminal Anda. perhatikan bahwa Anda dapat memilih nama variabel bash yang valid alih-alih
runandlog
:Namun ini hanya berlanjut untuk sesi Bash saat ini, itu berarti setelah menutup jendela terminal, fungsi akan hilang.
Jika Anda mencoba dan menyukainya, Anda dapat membuatnya selalu tersedia dengan mengedit
~/.bashrc
file Anda dan menambahkan baris ini sampai akhir.Cara Penggunaan:
Setelah mendefinisikan fungsi, Anda dapat menggunakannya untuk menjalankan perintah sambil mencatat perintah itu sendiri dan hasilnya ke file. Anda bahkan dapat menambahkan lebih banyak informasi seperti pengguna yang mengeksekusinya, yang sudah saya sertakan ke dalam fungsi, atau waktu yang tepat untuk menjalankannya. Permintaan fitur dalam komentar dipersilahkan! :)
Sintaksnya sederhana:
Contoh:
Sesi contoh sebagai pengguna
bytecommander
, yang beroperasi dari direktori home dapat terlihat seperti ini:Yang akan menghasilkan file baru
mylogfile
(jika sudah ada, fungsi akan menambahkan output ke sana!) Di direktori saat ini dengan konten:sumber
Trik yang cukup tidak jelas tetapi fungsional adalah:
Jelek, tapi berhasil!
sumber
Anda bisa meneruskan perintah ke fungsi yang akan mencetak perintah terlebih dahulu dan output perintah setelah itu (pengalihan disimpan dari perintah yang dicetak dengan sengaja, Anda dapat dengan mudah mengubah ini dengan menghapus tanda kutip dari perintah dan dengan mencetak dan menjalankan
$@
sebagai gantinya dari$1
dalam fungsi):Untuk menambahkan perintah setelahnya, Anda dapat menjalankan perintah ini, yang akan menyisipkan perintah terakhir yang dijalankan di bagian atas file:
<<<"[...]"
: di sini string;[...]
diarahkan kecat
'sstdin
;$(<foo)
: substitusi perintah; diganti dengan konten "foo";cat [...] - >foo
: digabungkanstdin
ke[...]
dan output ke "foo";<([...])
: subtitusi proses: diganti dengan deskriptor file yang berisi output[...]
;history 2 | sed -n '1s/ [0-9][0-9]* \(.*\)/\1\n/p'
: menampilkan dua perintah terakhir, menghilangkan dua spasi diikuti oleh satu atau lebih digit diikuti oleh dua spasi dari baris pertama dan mencetaknya;sumber
$1
? Dan tidak perlueval
.eval
tidak diperlukan, tidak yakin mengapa saya menambahkannya sebelumnya. Terima kasih.