Saya kesulitan mendapatkan alias untuk diperluas di akun hosting saya ketika saya menjalankan perintah seperti:
ssh user@server "bash -c \"alias\""
File .bashrc saya adalah:
echo .bashrc
# .bashrc
shopt -s expand_aliases
# Source global definitions (commenting this out does nothing)
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# User specific aliases and functions
alias php="php55"
alias composer="php ~/bin/composer.phar"
Ketika saya menjalankan perintah ssh di atas, saya melihat ".bashrc" digaungkan. Tetapi jika saya mencoba menjalankan alias, saya tidak mendapatkan apa-apa.
Saya dapat mencoba "bash -ic", tetapi ini sebenarnya dalam skrip yang tidak dapat saya ubah dengan mudah, dan saya ingin tahu mengapa ini tidak berhasil.
Output dari ssh user@server "bash -c \"shopt\""
.bashrc
autocd off
cdable_vars off
cdspell off
checkhash off
checkjobs off
checkwinsize off
cmdhist on
compat31 off
compat32 off
compat40 off
dirspell off
dotglob off
execfail off
expand_aliases off
extdebug off
extglob off
extquote on
failglob off
force_fignore on
globstar off
gnu_errfmt off
histappend off
histreedit off
histverify off
hostcomplete on
huponexit off
interactive_comments on
lithist off
login_shell off
mailwarn off
no_empty_cmd_completion off
nocaseglob off
nocasematch off
nullglob off
progcomp on
promptvars on
restricted_shell off
shift_verbose off
sourcepath on
xpg_echo off
Output dari ssh user@server "bash -c \"echo $SHELL\""
.bashrc
/bin/bash
$PATH
karena~/bin:$PATH
berfungsi dengan baik.~/.local/bin
ketika/etc/profile
diproses akan secara otomatis menambahkannya ke PATH Anda. Anda juga bisa. /etc/profile
setelah membuat folder untuk menambahkannya ke PATH Anda tanpa reboot atau logout / login.Jawaban:
Dari
bash(1)
halaman manual:sumber
shopt -s expand_aliases
di .bashrc saya, tapi itu sepertinya tidak berhasil. Saya tidak yakin mengapa tidak, tapi saya kira ini akan menjadi jawabannya secara normalshopt -s expand_aliases
ada di dalam Anda.bashrc
sebelum alias? Tentu saja, output Anda dalam pertanyaan yang ditampilkanexpand_aliases
adalahoff
.shopt
tidak menunjukkannya sebagai mati. Mungkin hanya ada beberapa pengaturan server aneh yang mencegah ini, saya tidak tahu. Saya mendapat solusi.bashrc
file itu tidak bersumber secara default.Shell yang Anda dapatkan ketika Anda menjalankan perintah jarak jauh dengan SSH bukanlah shell interaktif atau shell login:
(tidak ada
i
dan tidak adal
dalam tanggapan)Dalam kasus Bash itu berarti tidak ada file inisialisasi biasa yang dibaca.
Anda dapat memaksa remote shell menjadi shell login dengan menambahkan
-l
ke doa Bash Anda, yang berarti bahwa itu akan mengurai yang pertama dari~/.bash_profile
,~/.bash_login
, dan~/.profile
bahwa hal itu dapat menemukan, mencari agar, tapi tidak~/.bashrc
. Ini berarti Anda harus meletakkan alias di salah satu file itu.sumber
Saya memiliki masalah yang sama, dan pada awalnya
shopt -s expand_aliases
sepertinya tidak membantu. Yang saya temukan adalah bahwa opsi ini harus ditetapkan sebelum menambahkan alias yang sebenarnya. Jadi jika alias diciptakan sebelum Anda.bashrc
set padaexpand_aliases
pilihan, mereka tidak akan tersedia. Karena itu, Anda harus memuat (atau memuat ulang) alias setelah mengatur opsi.sumber
bash (1) mengatakan
jadi, tentu saja, Anda sumber .bashrc secara manual atau jalankan dengan -i
jika alias yang Anda butuhkan, saya akan merekomendasikan membaginya dalam mis. alias dan kemudian sumber itu dari .bashrc dan skrip Anda, untuk berjaga-jaga jika hal-hal merayap di .bashrc yang dapat merusak skrip Anda, seperti yang sering terjadi
sumber
Anda dapat memecahkan masalah apa pun dengan memasukkan:
di baris pertama.
sumber