Apa yang env ls -al
dilakukan perintah ?
Saya memiliki tes Linux dan ada pertanyaan: "Bagaimana menjalankan perintah secara langsung, tetapi tidak alias?"
Saya tahu ada solusi seperti perintah awalan dengan simbol khusus, tapi saya lupa. Sekarang saya tahu itu \
. (baca dari posting ini ).
Tetapi saya juga ingat bahwa di suatu tempat saya membaca bahwa untuk menghilangkan alias kita dapat awalan perintah dengan env
. Saya melakukannya dan tampaknya berhasil, tetapi jawaban saya memenuhi syarat sebagai salah. Saya membaca info
dan man
pada env
, tapi tidak mengerti terlalu banyak.
Apa yang env
dilakukan dan tepatnya env <command>
tanpa argumen untuk env
dirinya sendiri?
env <command>
,command <command>
, dan\<command>
. Menurut pendapat saya, jika beberapa tes mengatakanenv <command>
tidak valid, maka tes itu rusak.command
atauenv
yang akan membuat `\` satu-satunya jawaban yang dapat diterima.man
dan tidak mengerti apa yangenv
sebenarnya dilakukan. Setelah posting ini - jelas dan jawaban saya ditinjau (diterima). Terimakasih untuk semua!Jawaban:
Perintah ini
menjalankan perintah
program and args
dengan lingkungan yang dibentuk dengan memperluas lingkungan saat ini dengan variabel dan nilai lingkungan yang ditentukan olehname=value
danname2=value2
. Jika Anda tidak menyertakan argumen sepertiname=value
, maka lingkungan saat ini dilewatkan tanpa dimodifikasi.Hal utama yang terjadi sehubungan dengan alias adalah bahwa env adalah perintah eksternal, sehingga tidak memiliki "pengetahuan" alias: alias adalah konstruksi shell yang bukan bagian dari model proses normal dan tidak berdampak pada program yang secara langsung dijalankan oleh program non-shell (seperti env ). env hanya meneruskan
program and arguments
ke panggilan exec (seperti execvp , yang akan mencari PATH untukprogram
).Pada dasarnya, menggunakan env seperti ini adalah (kebanyakan) cara shell-independen untuk menghindari alias, fungsi shell, perintah built-in shell, dan bit lain dari fungsionalitas shell yang mungkin mengganti atau mengganti argumen posisi perintah (yaitu nama program) —kecuali, tentu saja,
env
alias, atau fungsi shell! Jika Anda khawatirenv
menjadi alias, Anda bisa menguraikan jalur lengkap (mis./usr/bin/env
, Meskipun mungkin berbeda).sumber
Penggunaan penting lain dari
env
(selain dari menghindari perintah alias mencari) adalah mencariPATH
perintah. Ini sangat penting di mana jalur absolut diperlukan, tetapi berbeda dari satu sistem ke sistem lainnya.Misalnya, memulai skrip Bash dengan
#!/bin/bash
baik-baik saja, padahal#!bash
tidak, meskipun/bin
sudah termasuk dalamPATH
pada setiap sistem yang masuk akal.Saya sering menjumpai ini dalam program Python, yang biasanya dimulai dengan
#!/usr/bin/env python
untuk menghindari menentukan jalur penuh, bergantung pada sistem daripython
file yang dapat dieksekusi (namun, perlu diingat bahwa ini tetapenv
berada di dalam/usr/bin
, ini jauh lebih umum daripada lokasi python biner).sumber