Yanıtlar:
sh
programı sh
tercüman olarak çağırır ve -c
bayrak, bu komutu yorumladığı şekilde aşağıdaki komutu yerine getirir.
Ubuntu'da, sh
genellikle sembolize edilir /bin/dash
, bunun anlamı sh -c
, çizgi kabuğu ile bir komut çalıştırdığınızda bash yerine komutu çalıştırmak için kullanılacaktır. sh
İle çağrılan kabuk sembolik bağlantıya bağlıdır - öğrenebilirsiniz readlink -e $(which sh)
. sh -c
Komutu özellikle bash yerine o kabukla bir komut çalıştırmak istediğinizde kullanmalısınız .
Bu sözdizimini ( -c
bayrak) diğer tercümanlarla da kullanabilirsiniz. Bunun klasik bir kullanımı (@edwinksl tarafından işaret edilen , sudo ile çalışmayan yönlendirme sorununu aşmaktır (burada bash -c
veya kullanabilirsiniz sh -c
)
sudo sh -c 'echo "foo" > /home/bar'
dosyasına yazacaktır bar
metin içeren foo
için /home/
ise, sudo echo "foo" > /home/bar
başarısız burada çok iyi açıklandığı gibi
Komut dizgisinde 'tek tırnak' kullanmak önemlidir, aksi takdirde mevcut kabuk, aradığınız tercümana geçmeden önce onu genişletmeye çalışır.
örneğin (tire ile farklı sonuçlar verecek bir komut düşünene kadar python ile ...)
$ python3 -c print (35/7)
bash: syntax error near unexpected token `('
$ python3 -c 'print (35/7)'
5.0
-c
Argümanı:
Komutları standart girdi yerine command_string işlenenden okuyun. Özel parametre 0, komut_adı işlecinden ve konumsal parametrelerden ($ 1, $ 2, vb.) Kalan argüman işleyicilerinden ayarlanır.
sh
Düzenlemelerin diğer detaylarını çalıştırarak bulabilirsiniz:
$ man sh
Bir dizgiyi argüman olarak kullanmanın bir örneği:
$ sh -c "echo This is a test string"
Bu daha ayrıntılı bir sh -c
örnek. Google Drive’dan bir doküman indirecek ve masaüstünde düzenlemek için açacak:
$ sh -c "wget 'https://docs.google.com/document/u/0/d/1jcBtdlMx0f4BhCmAmnIViIy4WN4oRevWFRzse-P00j0/export?format=docx' -O test.docx && xdg-open test.docx 2>/dev/null"
sh -c
oturum açma olmayan , etkileşimli olmayan bir oturumun sh
( dash
Ubuntu'da) çoğaltılması .
Bu kabuk oturumda çalıştırılacak komutu aşağıdaki, 0 (bağımsız değişken (pozisyonel parametresi) olarak kabul edilir ARGV0
), ve bu komuta bağımsız değişkeni (kalan kısım ARGV0
1'den başlayarak) ( ARGV1
, ARGV2
, ...).
Bu tür bir oturumda çalışmasına izin verilen tipik kabuk özelliklerini de kullanabilirsiniz; örneğin ;
, birden çok komut kullanarak komut ayırma , komut kullanarak gruplama {}
, başka bir alt kabuk oluşturma ()
ve benzeri işlemler. Bunların kullanımı, daha önce bahsedilen argüman tanımlarını / örneklerini biraz değiştirebilir.
Sadece not etmek gerekirse, yalnızca etkileşimli kabuklara özgü özellikler (varsayılan olarak), örneğin, tarihin genişletilmesi, source
-ing ~/.bashrc
ve /etc/bash.bashrc
vb. Bu oturumda etkileşimli olmadığı için kullanılamaz . -i
Seçeneği kullanarak etkileşimli oturumlar davranışını (neredeyse) simüle edebilirsiniz :
sh -ic ...
Benzer şekilde, oturum açma özelliğine özgü özellikler yalnızca (varsayılan olarak), örneğin source
-ing ~/.profile
(verilen ~/.bash_profile
ve ~/.bash_login
bulunmayan) /etc/profile
kabuklarıdır ve kabuk, oturum açma dışı bir kabuk olduğu için yapılmayacaktır . Bu -l
seçeneği kullanarak oturum açma kabukları davranışını simüle edebilirsiniz :
sh -lc ...
Hem giriş hem de etkileşimli oturumları simüle etmek için:
sh -lic ...
sh -c
misiniz? O anlatılan konumsal parametreler atama göstermesi halinde ekstra güzel olurdu-c
parçasıman sh
.