Selain jawaban Martin, Ash, dan Kevin, terkadang Anda akan melihat ampers dan digunakan secara matematis untuk bitwise AND * :
$ echo $(( 11 & 7 ))
3
Jika Anda tidak terbiasa dengan operator bit:
11: 1011
7: 0111
-------- AND
3: 0011
Di setiap posisi ada satu bit di angka pertama DAN angka kedua, atur bit itu menjadi satu di jawabannya.
* Fitur dalam jawaban Kevin disebut sebagai AND logis .
Untuk menguraikan jawaban Ash, saat digunakan dalam pengalihan, ampersand dapat memberitahu shell untuk menyalin deskriptor file. Dalam perintah ini echo "hello" > outputfile 2>&1
, ampersand menyebabkan output apa pun yang mungkin menuju ke kesalahan standar (stderr, file descriptor 2) untuk pergi ke tempat yang sama dengan output standar (stdout, file descriptor 1, default untuk sisi kiri >
). The >& outputfile
Operator adalah istilah untuk > outputfile 2>&1
.
Juga, baru dalam Bash 4, ada dua terminator baru untuk klausa dalam case
perintah ;&
dan ;;&
yang memengaruhi apakah suatu kasus "jatuh" dan, jika demikian, apakah pengujian berikutnya dilakukan.
Dijeda sampai pemberitahuan lebih lanjut.
sumber
>& filename
mengeluarkan stdout dan stderr ke file yang sama. Jika Anda ingin mengarahkan ulang stderr saja (dan biarkan stdout sendiri), Anda akan melakukannya2> filename
. Adapun pertanyaan Anda yang lain, kemungkinan besar Anda akan menggunakan keduanyanohup
dan&
.logout
atauexit
perintah.Dalam skrip Bash shell, ampersand "&" digunakan untuk memotong proses:
Ini akan menyebabkan perintah find forked dan dijalankan di latar belakang (Anda selalu dapat membunuhnya dengan PID-nya).
sumber
Untuk mendapatkan prompt Anda kembali dengan segera, dan jalankan proses di latar belakang.
nohup memungkinkan proses latar belakang untuk terus berjalan bahkan setelah pengguna logout (atau keluar dari shell yang memulai).
> & mengalihkan baik output standar dan kesalahan standar ke file log.
& menjalankan semuanya di latar belakang, memberi Anda konfirmasi segera.
Penjelasan:
Setiap proses Linux membuka tiga saluran I / O, input "stdin", output standar "stdout" dan output kesalahan standar "stderr". Mereka dapat digunakan untuk biner, tetapi secara tradisional teks. Ketika sebagian besar program melihat stdin dekat, mereka keluar (ini dapat diubah oleh programmer).
Ketika cangkang induk keluar, stdin ditutup pada anak-anak, dan (sering, biasanya) anak-anak juga keluar. Selain itu, anak-anak menerima sinyal perangkat lunak, SIGHUP, yang menunjukkan bahwa pengguna telah "menutup" (sebelumnya, modem) dan defaultnya di sini adalah untuk keluar juga. (Catatan, seorang programmer dapat mengubah semua ini saat menulis program).
Jadi, apa yang dilakukan nohup adalah memberi anak proses lingkungan I / O yang terpisah, mengikat seluk beluk ke sesuatu yang tidak terikat pada kulit induk, dan melindungi anak dari sinyal SIGHUP. Setelah pengguna terputus, Anda akan melihat proses latar belakang nohup yang dimiliki oleh init (proses 1), bukan shell pengguna.
Namun
nohup
tidak dapat melakukan pekerjaan sepenuhnya jika proses dijalankan di latar depan, sehingga&
digunakan untuk menjalankan program di latar belakang, di mana ia dapat dengan senang hati tetap berjalan dengan atau tanpa pengguna masuk.sumber
Selain jawaban @ Martin: Penggunaan ampersand lainnya (
>&
seperti di atas) adalah untuk menangkap keduanyastdout
danstderr
. Biasanya, jika Anda mengarahkan output ke file dengan hanya '>', Anda hanya akan mendapatkan outputstdout
, tidak ada kesalahan.sumber
Selain jawaban Martin dan Ash, terkadang Anda mungkin melihat penggunaan
&&
token. Ini digunakan untuk mengatakan "jalankan perintah kedua jika dan hanya jika perintah pertama berhasil dijalankan." Perintah yang ditulis dengan baik akan, jika memiliki kesalahan, tidak berhasil keluar.sumber
Jawaban Martin bagus, tapi agak ambigu. Perintah selalu bercabang dan dijalankan, tetapi perilaku shell yang normal adalah menunggu perintah sampai keluar. Ampersand meletakkannya di latar belakang sehingga Anda mendapatkan terminal prompt kembali dan Anda dapat melakukan hal-hal lain. Jika proses memuntahkan data ke stdout atau stderr, ini akan dicampur dengan apa pun yang Anda lakukan saat diminta, dan dapat membingungkan Anda. Inilah sebabnya mengapa Anda mengarahkan ulang dengan> & /path/to/logfile.txt.
Menanggapi George2, perilaku normal untuk keluar shell adalah mengirim sinyal SIGHUP ke semua proses dalam kelompok proses yang sama (pada dasarnya hal-hal yang Anda hasilkan) dan mereka biasanya akan berakhir. Jika Anda ingin ini berlanjut bahkan jika Anda menutup proses shell, Anda dapat menggunakan perintah nohup untuk membuat mereka mengabaikan sinyal ini dan terus berjalan. Ada nama khusus untuk jenis proses ini, ini disebut proses daemon (diucapkan 'setan').
sumber