অ-ইন্টারেক্টিভ শেল প্রসারিত উপন্যাস


12

আমি যখন কোনও কমান্ড চালাচ্ছি তখন আমার হোস্টিং অ্যাকাউন্টটি প্রসারিত করতে পারিবারিক উপকরণগুলি পেতে আমার সমস্যা হচ্ছে:

ssh user@server "bash -c \"alias\""

আমার .bashrc ফাইলটি হ'ল:

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"

আমি যখন উপরের ssh কমান্ডটি চালাচ্ছি, তখন আমি ".bashrc" প্রতিধ্বনি দেখতে পাই। তবে আমি যদি এলিয়াস চালানোর চেষ্টা করি তবে কিছুই পাই না।

আমি "বাশ-আইসি" চেষ্টা করতে পারি, তবে এটি আসলে এমন একটি স্ক্রিপ্টে যা আমি সহজেই পরিবর্তন করতে পারি না এবং আমি কেন এটি কাজ করছে না তা জানতে চাই।

আউটপুট 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

আউটপুট ssh user@server "bash -c \"echo $SHELL\""

.bashrc
/bin/bash

আমি ছেড়ে দিয়েছি এবং সবেমাত্র bin / বিনে সিমনলিংক এবং স্ক্রিপ্ট তৈরি করেছি যা আমি যে উপাধিকার সাথে চেয়েছিলাম একই কাজ করে। যতদিন আমি আমার রপ্তানি $PATHহিসাবে ~/bin:$PATHএটা ভাল কাজ করে।
ম্যাট

উবুন্টুতে (১.0.০৪ এবং নিশ্চিতভাবে আরও নতুন) আপনার প্রসেস ~/.local/binহওয়ার সময় /etc/profileযদি এটি থাকে তবে এটি স্বয়ংক্রিয়ভাবে আপনার প্যাথ-এ এটি যোগ করবে। . /etc/profileফোল্ডারটি তৈরি করার পরে এটি পুনরায় বুট বা লগআউট / লগইন ছাড়াই আপনার প্যাথএটিতে যুক্ত করার জন্য can
ড্রাগন 788

উত্তর:


15

থেকে bash(1)মানুষ পৃষ্ঠা:

শেলটি ইন্টারেক্টিভ না হলে অ্যালিয়াসগুলি প্রসারিত হয় না, যদি না শপ বিকল্পটি প্রসারিত_লিয়াস শেল বিকল্পটি সেট করা না হয় (নীচে শেল বিল্টিন কম্যান্ডের অধীনে শপটের বর্ণনা দেখুন)।


5
shopt -s expand_aliasesআমার .bashrc এ আমার আছে , তবে এটি কাজ করছে বলে মনে হয় না। আমি নিশ্চিত না কেন, তবে আমার ধারণা এই উত্তরটি সাধারণত হবে
ম্যাট

@ ম্যাট আমি 'ইভেন্টস' এর ক্রম সম্পর্কে নিশ্চিত নই, তবে আপনি কি এটি নিশ্চিত করার চেষ্টা করেছেন যে উপন্যাসের আগে এটি shopt -s expand_aliasesআপনার মধ্যে রয়েছে .bashrc? অবশ্যই, প্রশ্ন শো আপনার আউটপুট expand_aliasesহয় off
ক্রিমসন-এগ্রেট

হ্যাঁ, আমার প্রশ্নে .brcrc দেখুন। আমি ইকো লাইনটি দেখছি তবে shoptএটি বন্ধ হিসাবে দেখায় না। সম্ভবত এখানে কিছু অদ্ভুত সার্ভার সেটিংস রয়েছে যা এটি প্রতিরোধ করছে, আমি জানি না। আমি একটি কাজ পেয়েছি
ম্যাট

সম্ভবত .bashrcফাইলটি ডিফল্টরূপে উত্সাহিত হয়নি।
ড্যানিয়েল ফারেল

8

আপনি এসএসএইচ দিয়ে রিমোটলি কমান্ড কার্যকর করার সময় আপনি যে শেলটি পাবেন সেটি না ইন্টারেক্টিভ শেল বা লগইন শেল নয়:

$ ssh server 'bash -c "echo $-"'
chsB

( প্রতিক্রিয়া নেই iএবং না l)

বাশের ক্ষেত্রে এর অর্থ হ'ল স্বাভাবিক আরম্ভের কোনও ফাইলই পঠিত হয় না।

আপনাকে অবশ্যই দূরবর্তী শেল যোগ করে লগ-ইন শেল হতে জোর করতে পারেন -lআপনার ব্যাশ আবাহন করা, যার মানে এটি প্রথম এক পার্স হবে ~/.bash_profile, ~/.bash_loginএবং ~/.profile, এটা খুঁজে পেতে পারে, যাতে অনুসন্ধানের, কিন্তু না ~/.bashrc। এর অর্থ হল যে পরিবর্তে আপনাকে সেই ফাইলগুলির মধ্যে একটিতে আপনার এলিয়াস রাখতে হবে।


এটি সমাধান মত শোনাচ্ছে। আমি এমনকি এই সার্ভারটি আর ব্যবহার করছি না তাই আমি এটি পরীক্ষা করতে পারছি না, তবে অন্য কেউ যদি প্রশ্নটি খুঁজে পায় তবে সম্ভবত এটি উত্সাহিত করার উপযুক্ত।
ম্যাট

2

আমারও একই সমস্যা ছিল এবং প্রথমে shopt -s expand_aliasesসাহায্য করার কথা মনে হয়নি। আমি যা জানতে পেরেছি তা হল আসল عرف যোগ করার আগে এই বিকল্পগুলি সেট করা উচিত। সুতরাং আপনার বিকল্পগুলি .bashrcসেট করার আগে যদি উপকরণগুলি তৈরি করা হয় তবে expand_aliasesসেগুলি উপলভ্য হবে না। অতএব, বিকল্পটি সেট করার পরে আপনার এলিয়াসগুলি লোড করা (বা পুনরায় লোড করা) করা উচিত।


0

বাশ (1) বলে

...

লগইন শেল নয় এমন একটি ইন্টারেক্টিভ শেলটি যখন শুরু হয়, তখন ফাইলটি উপস্থিত থাকলে ash / .bashrc থেকে আদেশগুলি পড়ে এবং কার্যকর করে।

...

একটি ইন্টারেক্টিভ শেলটি হ'ল নন-বিকল্প যুক্তি ছাড়াই এবং -c বিকল্প ব্যতীত যার স্ট্যান্ডার্ড ইনপুট এবং ত্রুটি উভয় টার্মিনালের সাথে সংযুক্ত (ইসটিটি (3) দ্বারা নির্ধারিত), বা একটি -i বিকল্প দিয়ে শুরু হয়েছিল।

সুতরাং, স্পষ্টতই, আপনি নিজেই উত্সটি .brcrc ম্যানুয়ালি করেন বা এটি -i দিয়ে চালান

যদি উপনামগুলির জন্য আপনার সমস্ত প্রয়োজন হয় তবে আমি এগুলিকে পৃথক করে রাখার পরামর্শ দিচ্ছি যেমন .aliases এবং তারপরে উত্স হ'ল .Bashrc এবং আপনার স্ক্রিপ্ট উভয়ই থেকে, কেবলমাত্র যদি স্ট্রিপটি লাইন আপ করে বাশার্কে আপনার স্ক্রিপ্টটি ভেঙে যেতে পারে, যেমনটি প্রায়শই ঘটে


সুতরাং আমি দেখতে পাচ্ছি .বাশার্কটি স্রোস করা হচ্ছে। আমি কমান্ডটি চালানোর সময় .bashrc থেকে ইকো লাইনটি দেখতে পাচ্ছি। সমস্যাটি হ'ল এই ফাইলের উপাধিগুলি প্রসারিত হয় না।
ম্যাট

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.